Files
privacy.sexy/src/application/collections/linux.yaml
undergroundwires 5a7d7d88ff mac: improve clearing privacy permissions
- Improve the service permissions reset logic:
  - Implement more intuitive and user-friendly messages.
  - Ensure graceful handling when `tccutil` is unavailable.
  - Avoid treating unsupported service IDs as errors.
  - Introduce atemplated shared function.
- Rename 'Clear all privacy permissions for applications' to
  'Clear application privacy permissions' to enhance clarity.
- Add additional documentation.
- Introduce support for missing service permissions.
- Fix a bug where clearing "contacts" permissions inadvertently affected
  "full disk access" permissions.
- Move the option to clear all application permissions to top for
  improved accessibility.
- Standardize naming across scripts to maintain consistency and clarity.
2023-11-29 13:07:41 +01:00

3907 lines
251 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Structure is documented in "docs/collection-files.md"
os: linux
scripting:
language: shellscript
startCode: |-
#!/usr/bin/env bash
# {{ $homepage }} — v{{ $version }} — {{ $date }}
if [ "$EUID" -ne 0 ]; then
script_path=$([[ "$0" = /* ]] && echo "$0" || echo "$PWD/${0#./}")
sudo "$script_path" || (
echo 'Administrator privileges are required.'
exit 1
)
exit 0
fi
export HOME="/home/${SUDO_USER:-${USER}}" # Keep `~` and `$HOME` for user not `/root`.
endCode: |-
echo 'Your privacy and security is now hardened 🎉💪'
echo 'Press any key to exit.'
read -n 1 -s
actions:
-
category: Privacy cleanup
docs: |-
These scripts allow you to increase privacy by deleting collected data about you and your behavior.
children:
-
category: Clear terminal history
docs: |-
Reading terminal history is one of the attack techniques.
The existence of bash history files is defined as an unsecured credential attack technique by MITRE [1].
[1]: https://web.archive.org/web/20221029134827/https://attack.mitre.org/techniques/T1552/003/ "Unsecured Credentials: Bash History, Sub-technique T1552.003 - Enterprise | MITRE ATT&CK® | attack.mitre.org"
children:
-
name: Clear bash history
recommend: strict
docs: |-
Bash (Bourne-Again SHell) is from the GNU project.
It is used by most distributions as their default shell.
See also [GNU Bash Homepage](https://web.archive.org/web/20221029211839/https://www.gnu.org/software/bash/).
call:
function: DeleteFileFromUserAndRootHome
parameters:
file: .bash_history
-
name: Clear Zsh history
recommend: strict
docs: |-
Zsh is also known as Z-shell [1]. See its [homepage](https://web.archive.org/web/20221029211848/https://www.zsh.org/) for more information.
It is one of the most used shells and has been the default shell in Kali Linux since 2020.4 [2].
Arch Linux installer uses zsh [3] but sets bash on disk as default [4].
[1]: https://web.archive.org/web/20221029134900/https://en.wikipedia.org/wiki/Z_shell "Z shell - Wikipedia | wikipedia.org"
[2]: https://web.archive.org/web/20221029134925/https://www.kali.org/blog/kali-linux-2020-4-release/ "Kali Linux 2020.4 Release (ZSH, Bash, CME, MOTD, AWS, Docs, Win-KeX & Vagrant) | Kali Linux Blog | kali.org"
[3]: https://web.archive.org/web/20221029181441/https://gitlab.archlinux.org/archlinux/archiso/-/blob/9f16862acd7e7be02da72f63a03b4c0e256dabff/configs/releng/packages.x86_64#L32 "configs/releng/packages.x86_64 · 9f16862acd7e7be02da72f63a03b4c0e256dabff · Arch Linux / archiso · GitLab"
[4]: https://web.archive.org/web/20221029181616/https://wiki.archlinux.org/title/bash "Bash - ArchWiki"
call:
function: DeleteFileFromUserAndRootHome
parameters:
file: .zsh_history
-
name: Clear tcsh history
recommend: strict
docs: |-
C shell (csh) with file name completion and command line editing.
`~/.history` is its default histfile (history file) [1].
It's shipped by FreeBSD as the default root shell [2].
See also:
- [tcsh homepage](https://web.archive.org/web/20221029211930/https://www.tcsh.org/),
- [tcsh source code](https://web.archive.org/web/20221029212024/https://github.com/tcsh-org/tcsh).
[1]: https://web.archive.org/web/20221029134950/https://linux.die.net/man/1/tcsh "tcsh(1) - Linux man page | linux.die.net"
[2]: https://web.archive.org/web/20221029135041/https://books.google.com/books?id=LyDP5b2xzaMC&pg=PA56 "Sams Teach Yourself FreeBSD in 24 Hours - Michael Urban, Brian Tiemann - Google Books | books.google.com"
call:
function: DeleteFileFromUserAndRootHome
parameters:
file: .history
-
name: Clear fish history
recommend: strict
docs: |-
It is one of the most popular exotic shells that favors usability over standard compliance.
Its history file is stored in `~/.local/share/fish/fish_history` and `~/.config/fish/fish_history` [1].
It is used by PEUX OS as the default shell [2].
See also [fish shell homepage](https://web.archive.org/web/20221029212109/https://fishshell.com/) for more information.
[1]: https://web.archive.org/web/20221029135026/https://github.com/fish-shell/fish-shell/issues/862 "history file location · Issue #862 · fish-shell/fish-shell | github.com/fish-shell"
[2]: https://web.archive.org/web/20221029135110/https://peux-os.netlify.app/ "Homepage of Peux OS | [POS] | peux-os.netlify.app"
call:
- # >= 2.3.0
function: DeleteFileFromUserAndRootHome
parameters:
file: .local/share/fish/fish_history
- # < 2.3.0
function: DeleteFileFromUserAndRootHome
parameters:
file: .config/fish/fish_history
-
name: Clear KornShell (ksh) history
recommend: strict
docs: |-
KornShell is a shell that has different versions by different maintainers and developers such as `ksh93+u`, `ksh93v-, and `ksh2020`.
The latest maintained version is `ksh93u+m`, see its [GitHub repository (ksh93/ksh)](https://web.archive.org/web/20221029212509/https://github.com/ksh93/ksh).
Its history file (histfile) is saved at `~/.sh_history` by default [1] [2].
OpenBSD symlinks sh to ksh [3].
See also the [Wikipedia page](https://web.archive.org/web/20221029212931/https://en.wikipedia.org/wiki/KornShell) for more information.
[1]: https://web.archive.org/web/20221029135158/https://www.mkssoftware.com/docs/man1/history.1.asp "history -- display KornShell command history | manpage | mkssoftware.com"
[2]: https://web.archive.org/web/20221029135207/https://www.ibm.com/docs/en/aix/7.2?topic=commands-korn-shell-posix-shell-command-history "Korn shell or POSIX shell command history - IBM Documentation | ibm.com"
[3]: https://web.archive.org/web/20221029135300/https://www.reddit.com/r/unix/comments/6zqyl1/nix_distros_with_default_shells/ "*nix distros with default shells? | Reddit (/r/unix) | reddit.com"
call:
function: DeleteFileFromUserAndRootHome
parameters:
file: .sh_history
# -
# Dash [1] (used by Debian, Ubuntu, Void Linux etc.) does not support history [2].
# [1]: https://web.archive.org/web/20221029135301/https://git.kernel.org/pub/scm/utils/dash/dash.git
# [2]: https://web.archive.org/web/20221029135344/https://unix.stackexchange.com/questions/271595/how-can-i-access-the-history-buffer-in-sh-not-in-bash
-
name: Clear ash history
recommend: strict
docs: |-
It's also known as Almquist shell [1].
It's mainly a fork of dash (Debian Almquist shell) used in embedded Linux distributions such as DSLinux,
Alpine Linux, Tiny Core Linux and Linux-based router firmware such as OpenWrt, Tomato and DD-WRT [1].
It was also used by Android until Android 4.0 [2].
It uses `~/.ash_history` as the history file [3].
[1]: https://web.archive.org/web/20221030142637/https://en.wikipedia.org/wiki/Almquist_shell#Embedded_Linux "Almquist shell - Wikipedia | wikipedia.org"
[2]: https://web.archive.org/web/20221029135416/https://android.googlesource.com/platform/system/core/+/master/shell_and_utilities/README.md "Android's shell and utilities | android.googlesource.com"
[3]: https://web.archive.org/web/20221029135513/https://github.com/brgl/busybox/blob/abbf17abccbf832365d9acf1c280369ba7d5f8b2/shell/ash.c#L13626 "busybox/ash.c source code | github.com/brgl/busybox"
call:
function: DeleteFileFromUserAndRootHome
parameters:
file: .ash_history
-
name: Clear crosh history
recommend: strict
docs: |-
crosh is also known as ChromiumOS shell [1].
It is used in Chromium OS [2].
The history file is found in `~/.crosh_history` by default.
See its [source code (chromiumos/platform2)](https://web.archive.org/web/20221029135520/https://chromium.googlesource.com/chromiumos/platform2/+/HEAD/crosh) for more information.
[1]: https://web.archive.org/web/20221029135520/https://chromium.googlesource.com/chromiumos/platform2/+/HEAD/crosh "crosh git repository | chromium.googlesource.com"
[2]: https://web.archive.org/web/20221029135620/https://chromium.googlesource.com/chromiumos/platform2/+/HEAD/crosh/README.md "README.md file | crosh git repository | chromium.googlesource.com"
[3]: https://web.archive.org/web/20221029135627/https://chromium.googlesource.com/chromiumos/platform2/+/183c7e421bd3a55c757b33b639201555b9d7a283/crosh/crosh#154 "histfile source code | crosh git repository | chromium.googlesource.com"
call:
function: DeleteFileFromUserAndRootHome
parameters:
file: .crosh_history
-
category: Clear third-party application data
docs: |-
Scripts in this category clear data for third-party applications installed on the operating system.
Third-party applications are not typically distributed as part of the operating system and are
installed separately.
children:
-
name: Clear Steam cache
docs: |-
Steam is a video game digital distribution service and storefront by Valve [1].
Clearing Steam cache is safe without any side effects. This may resolve issues with Steam and help you save
space and increase privacy, but may lead to a single-time application performance decrease due to cache renewal.
See also: [Steam Homepage](https://web.archive.org/web/20221029212925/https://store.steampowered.com/)
[1]: https://web.archive.org/web/20221029135718/https://en.wikipedia.org/wiki/Steam_%28service%29 "Steam | Wikipedia | wikipedia.org"
code: |-
# Global installation
rm -rfv ~/.local/share/Steam/appcache/*
# Snap
rm -rfv ~/snap/steam/common/.cache/*
rm -rfv ~/snap/steam/common/.local/share/Steam/appcache/*
# Flatpak
rm -rfv ~/.var/app/com.valvesoftware.Steam/cache/*
rm -rfv ~/.var/app/com.valvesoftware.Steam/data/Steam/appcache/*
-
name: Clear Clementine cache
docs: |-
Clementine is a free and open-source audio player [1].
Cover art, moodbar, and network cache are all part of Clementine cache [2].
Clementine cache is kept in the global XDG spec (`~/.cache`) folder [3].
See also: [Clementine Homepage](https://web.archive.org/web/20221029213331/https://www.clementine-player.org/)
[1]: https://web.archive.org/web/20221029135732/https://en.wikipedia.org/wiki/Clementine_%28software%29 "Clementine | Wikipedia | wikipedia.org"
[2]: https://web.archive.org/web/20221029135808/https://github.com/clementine-player/Clementine/blob/7e48b78c158116166348502fd1da5116a2a480bf/src/core/utilities.cpp#L365-L391 "Clementine cache source code | GitHub | github.com/clementine-player/Clementine"
[3]: https://web.archive.org/web/20221029135834/https://github.com/clementine-player/Clementine/issues/3265 "Cache folder · Issue #3265 · clementine-player/Clementine | GitHub | github.com/clementine-player/Clementine"
code: |-
# Global installation
rm -rfv ~/.cache/Clementine/*
# Flatpak installation
rm -rfv ~/.var/app/org.clementine_player.Clementine/cache/*
# Snap installation
rm -rfv ~/snap/clementine/common/.cache/*
-
category: Clear Wine data
docs: |-
Wine is a compatibility layer capable of running Windows applications [1].
See also: [Wine Homepage](https://web.archive.org/web/20221029213416/https://www.winehq.org/).
[1]: https://web.archive.org/web/20221029135913/https://en.wikipedia.org/wiki/Wine_%28software%29 "Wine | Wikipedia | en.wikipedia.org"
children:
-
name: Clear Wine cache
recommend: standard
docs: |-
Wine has two different caches:
1. Temporary Windows files. Wine saves temporary Windows files at `<wine folder>/drive_c/windows/temp/` [1] [2].
2. Temporary Wine application cache [3] that is not connected to inner Windows files.
[1]: https://web.archive.org/web/20180328090608/http://www.zdnet.com/article/keeping-temp-folders-clean/ "Keeping temp folders clean | ZDNet | zdnet.com"
[2]: https://web.archive.org/web/20221029135944/https://ubuntuforums.org/showthread.php?t=1006132 "Why does Wine have its own temp folders? | UbuntuForums | ubuntuforums.org"
[3]: https://web.archive.org/web/20221029135955/https://wiki.debian.org/Wine#Mono_and_Gecko "Wine - Debian Wiki | wiki.debian.org"
code: |-
# Temporary Windows files for global prefix
rm -rfv ~/.wine/drive_c/windows/temp/*
# Wine cache:
rm -rfv ~/.cache/wine/
-
name: Clear Winetricks cache
recommend: standard
docs: |-
Winetricks is a helper script to download and install various redistributable runtime libraries
needed to run some programs in Wine [1].
Winetricks cache includes downloaded files cache (runtime libraries/directories).
It caches downloads `winetrickscache/$packagename` [2] [3].
User data cache is stored in `$XDG_CACHE_HOME/winetricks` (by default, `~/.cache/winetricks`) [4].
[1]: https://web.archive.org/web/20221029140111/https://wiki.winehq.org/Winetricks "Winetricks - WineHQ Wiki | wiki.winehq.org"
[2]: https://web.archive.org/web/20221029140047/https://github.com/Winetricks/winetricks/blob/164d243e1384ba7cc6058a6524c1472100b7722c/src/winetricks#L1269-L1271 "Wine source code | GitHub | github.com/Winetricks/winetricks"
[3]: https://web.archive.org/web/20221029140047/https://github.com/Winetricks/winetricks/blob/164d243e1384ba7cc6058a6524c1472100b7722c/src/winetricks#L1515-L1517 "Wine source code | GitHub | github.com/Winetricks/winetricks"
[4]: https://web.archive.org/web/20221029140204/https://manpages.debian.org/experimental/winetricks/winetricks.1.en.html#XDG_CACHE_HOME "winetricks man page | Debian Manpages | manpages.debian.org"
code: rm -rfv ~/.cache/winetricks/
-
name: Clear LibreOffice usage history
recommend: strict
docs: |-
LibreOffice is a free and open-source office productivity software suite, a project of The Document Foundation (TDF) [1].
`registrymodifications.xcu` is an XML file that contains the user-specified settings [2].
It is found inside the user settings directory (`~/.config/libreoffice/4/user`) [2].
It includes thumbnails generated [3], and a recent document list [4].
See also: [LibreOffice Homepage](https://web.archive.org/web/20221029214216/https://www.libreoffice.org/).
[1]: https://web.archive.org/web/20221029140306/https://en.wikipedia.org/wiki/LibreOffice "LibreOffice | Wikipedia | en.wikipedia.org"
[2]: https://web.archive.org/web/20221029140313/https://wiki.documentfoundation.org/images/b/b0/LibreOffice_config_extension_writing.pdf "Config specification | LibreOffice documentation | wiki.documentfoundation.org"
[3]: https://web.archive.org/web/20221029140438/https://askubuntu.com/questions/996397/where-are-libre-office-thumbnails-stored/996528 "Where are Libre Office thumbnails stored? | Ask Ubuntu Forums | askubuntu.com"
[4]: https://web.archive.org/web/20221029140501/https://forum.openoffice.org/en/forum/viewtopic.php?f=6&t=102020 "Restoring Recent documents list | Apache OpenOffice Community Forum | forum.openoffice.org"
code: |-
# Global installation
rm -f ~/.config/libreoffice/4/user/registrymodifications.xcu
# Snap package
rm -fv ~/snap/libreoffice/*/.config/libreoffice/4/user/registrymodifications.xcu
# Flatpak installation
rm -fv ~/.var/app/org.libreoffice.LibreOffice/config/libreoffice/4/user/registrymodifications.xcu
-
category: Clear Thunderbird data
docs: |-
Mozilla Thunderbird is a free and open-source cross-platform email client, personal information manager, news client, RSS and chat
client developed by the Mozilla Foundation [1].
See also: [Thunderbird Homepage | thunderbird.net](https://web.archive.org/web/20221029214240/https://www.thunderbird.net/en-US/).
Read about the files and folders in the profile folder in depth:
[Files and folders in the profile - Thunderbird | kb.mozillazine.org](https://web.archive.org/web/20221029140819/https://kb.mozillazine.org/Files_and_folders_in_the_profile_-_Thunderbird).
[1]: https://web.archive.org/web/20221029140516/https://en.wikipedia.org/wiki/Mozilla_Thunderbird "Thunderbird | Wikipedia | en.wikipedia.org"
children:
-
name: Clear Thunderbird cookies
docs: |-
Thunderbird stores cookie information in [1]:
- `cookies.sqlite`: Stores all cookies.
- `cookies.sqlite-journal`: The journal file for `cookies.sqlite`.
- `cookies.sqlite-shm`, `cookies.sqlite-wal`: Write-ahead log files for `cookies.sqlite`.
The file `cookies.sqlite` in the user's profile directory is used to store cookies between sessions [2].
[1]: https://web.archive.org/web/20221029140819/https://kb.mozillazine.org/Files_and_folders_in_the_profile_-_Thunderbird "Files and folders in the profile | Thunderbird | kb.mozillazine.org"
[2]: https://web.archive.org/web/20221029140816/https://kb.mozillazine.org/Cookies.sqlite "Cookies.sqlite | Thunderbird | kb.mozillazine.org"
call:
-
function: DeleteFileFromThunderbirdProfiles
parameters:
file: cookies.sqlite
-
function: DeleteFileFromThunderbirdProfiles
parameters:
file: cookies.sqlite-wal
-
function: DeleteFileFromThunderbirdProfiles
parameters:
file: cookies.sqlite-journal
-
function: DeleteFileFromThunderbirdProfiles
parameters:
file: cookies.sqlite-shm
-
name: Clear Thunderbird session restoration data (open windows and tabs)
docs: |-
The default window layout is saved in the session file (`session.json`) [1].
It includes data on what tabs are open [1].
[1]: https://web.archive.org/web/20221029140819/https://kb.mozillazine.org/Files_and_folders_in_the_profile_-_Thunderbird "Files and folders in the profile | Thunderbird | kb.mozillazine.org"
call:
function: DeleteFileFromThunderbirdProfiles
parameters:
file: session.json
-
name: Clear Thunderbird passwords
docs: |-
`logins.json` stores encrypted passwords [1].
It replaces `signons.sqlite`, which had replaced `signons.txt` [1].
`logins-backup.json` is stored to recreate `logins.json` [2].
[1]: https://web.archive.org/web/20221029140819/https://kb.mozillazine.org/Files_and_folders_in_the_profile_-_Thunderbird "Files and folders in the profile | Thunderbird | kb.mozillazine.org"
[2]: https://web.archive.org/web/20221029141151/https://support.mozilla.org/id/questions/1362315#answer-1469311 "Mozilla Support | support.mozilla.org"
call:
-
function: DeleteFileFromThunderbirdProfiles
parameters:
file: logins.json
-
function: DeleteFileFromThunderbirdProfiles
parameters:
file: logins-backup.json
-
name: Clear Thunderbird download history
docs: |-
Download history is saved in `downloads.sqlite` since Thunderbird 3 and in `downloads.rdf` before [1].
It stores data to show downloads in **Download Manager** [2].
Clearing download history can help to resolve slow downloads or program hangs [3].
[1]: https://web.archive.org/web/20221029140819/https://kb.mozillazine.org/Files_and_folders_in_the_profile_-_Thunderbird "Files and folders in the profile | Thunderbird | kb.mozillazine.org"
[2]: https://web.archive.org/web/20221029210450/https://kb.mozillazine.org/Downloads_not_visible_in_Download_Manager "Downloads not visible in Download Manager | Thunderbird | kb.mozillazine.org"
[3]: https://web.archive.org/web/20221029141349/https://bugzilla.mozilla.org/show_bug.cgi?id=159107 "159107 - page saving/downloads takes too much time (is slow) ('marooned' entries in downloads.rdf) | Mozilla Bug Report | bugzilla.mozilla.org"
call:
-
function: DeleteFileFromThunderbirdProfiles
parameters:
file: downloads.rdf # < Thunderbird 3
-
function: DeleteFileFromThunderbirdProfiles
parameters:
file: downloads.sqlite # >= Thunderbird 3
-
category: Clear Thunderbird address book data
docs: |-
Most users open the Thunderbird address book from within the email client, but it can also be launched separately [1].
Mozilla Thunderbird by default comes with two address books, even though more can be added [2]:
1. **Personal book**: For the most frequently used contacts.
2. **Collected book**: Collects addresses from email that you send.
[1]: https://web.archive.org/web/20221029141424/https://wiki.mozilla.org/Thunderbird:Help_Documentation:Using_the_Address_Book "Thunderbird:Help Documentation:Using the Address Book | MozillaWiki | wiki.mozilla.org"
[2]: https://web.archive.org/web/20221029141448/https://support.mozilla.org/en-US/questions/1038172 "WHAT ARE COLLECTED ADDRESSES VS, PERSONAL ADDRESS BOOK | Thunderbird Support Forum | Mozilla Support | support.mozilla.org"
children:
-
name: Clear Thunderbird personal address book
docs: |-
Files for personal addresses [1]:
- Since Thunderbird v78: `abook.sqlite`, `abook.sqlite-wal`.
- Before Thunderbird v78: `abook.mab`.
[1]: https://web.archive.org/web/20221029141501/https://www.recoverytools.com/blog/thunderbird-new-address-book/ "Thunderbird v78 Introduces New Address Book Formats (abook.sqlite) | RecoveryTools | recoverytools.com"
call:
-
function: DeleteFileFromThunderbirdProfiles
parameters:
file: abook.sqlite # >= Thunderbird v78
-
function: DeleteFileFromThunderbirdProfiles
parameters:
file: abook.sqlite-wal # >= Thunderbird v78
-
function: DeleteFileFromThunderbirdProfiles
parameters:
file: abook.mab # < Thunderbird v78
-
name: Clear Thunderbird collected address book
docs: |-
Files for collected addresses [1]:
- Since Thunderbird v78: `history.sqlite`, `history.sqlite-wal`.
- Before Thunderbird v78: `history.mab`.
[1]: https://web.archive.org/web/20221029141501/https://www.recoverytools.com/blog/thunderbird-new-address-book/ "Thunderbird v78 Introduces New Address Book Formats (abook.sqlite) | RecoveryTools | recoverytools.com"
call:
-
function: DeleteFileFromThunderbirdProfiles
parameters:
file: history.sqlite # >= Thunderbird v78
-
function: DeleteFileFromThunderbirdProfiles
parameters:
file: history.sqlite-wal # >= Thunderbird v78
-
function: DeleteFileFromThunderbirdProfiles
parameters:
file: history.mab # < Thunderbird v78
-
name: Clear clicked links history in Thunderbird
docs: |-
Thunderbird saves annotations, bookmarks, favorite icons, input history, keywords, and browsing history
(a list of pages visited) [1].
Data is saved at persistent `places.sqlite` [1] and temporary `places.sqlite-shm` and `places.sqlite.wal` [2].
[1]: https://web.archive.org/web/20221029141626/https://kb.mozillazine.org/Places.sqlite "Places.sqlite | MozillaZine Knowledge Base | kb.mozillazine.org"
[2]: https://web.archive.org/web/20221029141631/https://bugzilla.mozilla.org/show_bug.cgi?id=686237 "686237 - places.sqlite-wal and places.sqlite-shm not removed on exit | Mozilla Bugs | bugzilla.mozilla.org"
call:
-
function: DeleteFileFromThunderbirdProfiles
parameters:
file: places.sqlite
-
function: DeleteFileFromThunderbirdProfiles
parameters:
file: places.sqlite-shm
-
function: DeleteFileFromThunderbirdProfiles
parameters:
file: places.sqlite.wal
-
category: Clear data from development tools
docs: |-
This category includes tools that are typically used by developers, also known as "developer tools".
These tools allow a developer to create, test, and debug software.
Their data may leak data about the developer, their usage patterns, the environment used for development or the developed project.
children:
-
name: Clear Python history
docs: |-
Python is a high-level, general-purpose programming language [1]. Python comes preinstalled on most Linux distributions [2].
Since Python 3.4 the interactive mode does log all commands to `~/.python_history` [3].
See also:
- [Source code](https://web.archive.org/web/20221029214327/https://github.com/python/cpython/blob/b2499669ef2e6dc9a2cdb49b4dc498e078167e26/Lib/site.py#L430-L451) that
creates the file and registers it.
- [Python homepage](https://web.archive.org/web/20221029214344/https://www.python.org/)
[1]: https://web.archive.org/web/20221029210646/https://en.wikipedia.org/wiki/Python_%28programming_language%29 "Python (programming language) | Wikipedia | en.wikipedia.org"
[2]: https://web.archive.org/web/20221029141851/https://docs.python.org/3/using/unix.html "Using Python on Unix platforms | Python documentation | docs.python.org"
[3]: https://web.archive.org/web/20221029141921/https://bugs.python.org/issue20886 "Issue 20886: Disabling logging to ~/.python_history is not simple enough | Python tracker | bugs.python.org"
call:
function: DeleteFileFromUserAndRootHome
parameters:
file: .python_history
-
category: Clear Visual Studio Code data
docs: |-
Visual Studio Code, also commonly referred to as VS Code, is a source-code editor made by Microsoft [1].
Visual Studio Code saves data that reveals user behavior and preferences.
[1]: https://web.archive.org/web/20221029142001/https://en.wikipedia.org/wiki/Visual_Studio_Code "Visual Studio Code | Wikipedia | en.wikipedia.org"
children:
-
name: Clear Visual Studio Code crash reports
recommend: standard
docs: |-
Visual Studio Code stores crash reports that later on are uploaded to Microsoft servers by default [1].
It collects crash reports in `exthost Crash Reports` [1] and `Crash Reports` directories.
Deleting crash reports does not cause you any data loss that would affect your productivity.
[1]: https://web.archive.org/web/20221029142036/https://github.com/microsoft/vscode/blob/2948450d50c201acb40c8b10da305d8d3a293473/src/vs/workbench/services/extensions/electron-browser/localProcessExtensionHost.ts#L280-L301 "vscode source code | GitHub | github.com"
call:
-
function: ClearDirFromVsCodeUserDataDir
parameters:
directory: Crash\ Reports
-
function: ClearDirFromVsCodeUserDataDir
parameters:
directory: exthost\ Crash\ Reports
-
name: Clear Visual Studio Code cache
docs: |-
Unless you have unsaved changes, deleting the cache does not result in data loss [1].
However deleting cached data will lead to a slower initial experience as the files are cached again [1].
Visual Studio Code does not follow platform conventions for cache directories, but stores them in user data
directories instead [2].
Folders include `Cache`, `CachedData`, `Code Cache`, `GPUCache`, `CachedExtensions`, `CachedExtensionVSIXs` [3] [4].
[1]: https://web.archive.org/web/20221029142053/https://github.com/microsoft/vscode/issues/132509#issuecomment-914576815 "Provide functionality to delete temporary and cached files that do not affect core functionality · microsoft/vscode | GitHub | github.com"
[2]: https://web.archive.org/web/20221029142453/https://github.com/microsoft/vscode/issues/3884 "Revisit VS Code folder structure for app data, settings,extensions · Issue #3884 · microsoft/vscode | GitHub | github.com"
[3]: https://web.archive.org/web/20221029142505/https://github.com/microsoft/vscode/issues/126182#issue-919877609 "Cache files not stored under appropriate XDG directory · Issue #126182 · microsoft/vscode | GitHub | github.com"
[4]: https://web.archive.org/web/20221029142526/https://stackoverflow.com/questions/46246437/visual-studio-for-mac-cache-location/66295480 "macos - Visual Studio for Mac: Cache Location | Stack Overflow | stackoverflow.com"
call:
-
function: ClearDirFromVsCodeUserDataDir
parameters:
directory: Cache
-
function: ClearDirFromVsCodeUserDataDir
parameters:
directory: CachedData
-
function: ClearDirFromVsCodeUserDataDir
parameters:
directory: Code\ Cache
-
function: ClearDirFromVsCodeUserDataDir
parameters:
directory: GPUCache
-
function: ClearDirFromVsCodeUserDataDir
parameters:
directory: CachedExtensions
-
function: ClearDirFromVsCodeUserDataDir
parameters:
directory: CachedExtensionVSIXs
-
name: Clear Visual Studio Code logs
recommend: standard
docs: |-
Deleting Visual Studio Code logs does not cause any data loss, but hides usage patterns.
The logs are stored in `{user data dir}/logs` folder [1].
[1]: https://web.archive.org/web/20221029142630/https://github.com/microsoft/vscode/blob/f0f4c8782190861ce7ad536eecca45edca7d2ac7/src/vs/platform/environment/common/environmentService.ts#L71-L78 "vscode/environmentService.ts · microsoft/vscode · GitHub | "
call:
function: ClearDirFromVsCodeUserDataDir
parameters:
directory: logs
-
category: Clear Azure CLI data
docs: |-
The Azure command-line interface (Azure CLI) is a set of commands used to create and manage Azure resources [1].
With an emphasis on automation, the Azure CLI is accessible across all Azure services and is made to work quickly with Azure [1].
[1]: https://web.archive.org/web/20221029142932/https://learn.microsoft.com/en-us/cli/azure/ "Azure Command-Line Interface (CLI) - Overview | Microsoft Learn | learn.microsoft.com"
children:
-
name: Clear Azure CLI telemetry data
recommend: standard
docs: |-
The Azure CLI stores telemetry in the `telemetry` directory and `telemetry.txt`, `logs/telemetry.txt` files [1].
[1]: https://web.archive.org/web/20221029142939/https://github.com/Azure/azure-cli/blob/29767d75d850ddc1c24cc85bd46d861b61d77a47/src/azure-cli-telemetry/azure/cli/telemetry/const.py "Azure CLI Source Code | GitHub | github.com"
code: |-
rm -rfv ~/.azure/telemetry
rm -fv ~/.azure/telemetry.txt
rm -fv ~/.azure/logs/telemetry.txt
-
name: Clear Azure CLI logs
recommend: standard
docs: |-
Azure CLI saves logs in the `logs` directory [1].
[1]: https://web.archive.org/web/20221029143112/https://github.com/Azure/azure-cli/blob/87c9c3c5a46de622b38e1ec4d5797bb9a3eb9e6f/src/azure/cli/_logging.py#L23 "Azure CLI Source Code | GitHub | github.com"
code: rm -rfv ~/.azure/logs
-
name: Clear Azure CLI cache
recommend: standard
docs: |-
This script deletes cached Azure CLI objects [1].
Cleaning cache does not remove your credentials, so you'll keep your session and be logged in.
[1]: https://web.archive.org/web/20221029143238/https://learn.microsoft.com/en-us/cli/azure/cache?view=azure-cli-latest#az_cache_purge "az cache | Microsoft Learn | learn.microsoft.com"
call:
function: RunIfCommandExists
parameters:
command: az
code: az cache purge
-
name: Clear Azure login data (this will log you out of the current session)
recommend: strict
docs: |-
This script cleans the login data in three steps:
1. **`az logout`**:
It deletes the current authentication token and subscription ID [1].
It only logs out the selected/current user [1].
2. **`az account clear`**:
It clears all other subscriptions from the CLI's local cache [2].
It also logs out all users [2].
3. **Clear all access tokens**:
It removes the ADAL token cache file [3].
These are stored tokens from the Active Directory OAuth 2.0 code flow [4].
[1]: https://web.archive.org/web/20221029143252/https://learn.microsoft.com/en-us/cli/azure/reference-index?view=azure-cli-latest#az-logout "az logout | Microsoft Learn | learn.microsoft.com"
[2]: https://web.archive.org/web/20221029144354/https://learn.microsoft.com/en-us/cli/azure/account?view=azure-cli-latest#az_account_clear "az account clear | Microsoft Learn | learn.microsoft.com"
[3]: https://web.archive.org/web/20221029143409/https://github.com/Azure/azure-cli/blob/2e0a42f304f5fd543818a98a9eab2faf8d1fd6d6/src/azure-cli/azure/cli/command_modules/profile/custom.py#L215-L224 "Azure CLI source code | GitHub | github.com"
[4]: https://web.archive.org/web/20221029143429/https://learn.microsoft.com/en-us/azure/active-directory/develop/v2-oauth2-auth-code-flow "Microsoft identity platform and OAuth 2.0 authorization code flow - Microsoft Entra | Microsoft Learn | learn.microsoft.com"
call:
function: RunIfCommandExists
parameters:
command: az
code: |-
az logout 2&> /dev/null
az account clear
rm -fv ~/.azure/accessTokens.json
-
category: Clear browser history
docs: |-
A web browser (commonly just called a browser) is software that is used to visit websites [1].
The browsing history, cache entries, and other potentially sensitive data are all stored by browsers [1].
[1]: https://web.archive.org/web/20221029193056/https://en.wikipedia.org/wiki/Web_browser "Web browser - Wikipedia | wikipedia.org"
children:
-
category: Clear GNOME Web (Epiphany) history
docs: |-
GNOME Web (called Epiphany until 2012) is a free and open-source web browser based on the GTK port of Apple's WebKit rendering engine, called WebKitGTK [1].
It is developed by the GNOME project for Unix-like systems [1].
It is the default and official web browser of GNOME [1].
It has been the default browser of elementary OS since 5.0 [2] Bodhi Linux since 5.1.0 [3].
See also: [GNOME Web source code](https://web.archive.org/web/20221029214415/https://gitlab.gnome.org/GNOME/epiphany)
[1]: https://web.archive.org/web/20221029143523/https://en.wikipedia.org/wiki/GNOME_Web "GNOME Web | Wikipedia | en.wikipedia.org"
[2]: https://web.archive.org/web/20221029211521/https://medium.com/elementaryos/elementary-os-5-juno-is-here-471dfdedc7b3 "elementary OS 5 Juno is Here | medium.com"
[3]: https://web.archive.org/web/20221029211555/https://www.bodhilinux.com/2020/03/25/bodhi-linux-5-1-0-released/ "Bodhi Linux 5.1.0 Released | bodhilinux.com"
children:
-
name: Clear GNOME Web cache
docs: This script clears the temporary cache and does not cause any user data loss.
code: |-
# Global installation
rm -rfv /.cache/epiphany/*
# Flatpak installation
rm -rfv ~/.var/app/org.gnome.Epiphany/cache/*
# Snap installation
rm -rfv ~/~/snap/epiphany/common/.cache/*
-
name: Clear GNOME Web browsing history
recommend: strict
docs: |-
Your browsing history consists of the web pages that you have visited [1].
The history database is `ephy-history.db` [2] and uses `-shm` and `-wal` files during operation [3].
[1]: https://web.archive.org/web/20220810160903/https://help.gnome.org/users/epiphany/stable/history.html.en "Browsing history | GNOME Help | help.gnome.org"
[2]: https://web.archive.org/web/20221030154804/https://gitlab.gnome.org/GNOME/epiphany/-/issues/1169 "Maintainer defining ephy-history.db | GNOME/epiphany | GitLab | gitlab.gnome.org"
[3]: https://web.archive.org/web/20221030154903/https://gitlab.gnome.org/GNOME/epiphany/-/issues/1642 "Logs showing ephy-history.db-shm | GNOME/epiphany | GitLab | gitlab.gnome.org"
call:
-
function: DeleteFileFromGNOMEWebData
parameters:
file: ephy-history.db
-
function: DeleteFileFromGNOMEWebData
parameters:
file: ephy-history.db-shm
-
function: DeleteFileFromGNOMEWebData
parameters:
file: ephy-history.db-wal
-
name: Clear GNOME Web cookies
recommend: strict
docs: |-
`cookies.sqlite` file is used to store cookies in WebKit-based browsers [1].
See also:
- [What are cookies? | GNOME Web | gnome.org](https://web.archive.org/web/20221029214420/https://help.gnome.org/users/epiphany/stable/cookies.html.en)
- [Delete a cookie | GNOME Web | gnome.org](https://web.archive.org/web/20221029214415/https://gitlab.gnome.org/GNOME/epiphany)
[1]: https://web.archive.org/web/20221029144608/https://bugs.webkit.org/show_bug.cgi?id=149551 "Discussion around cookies.sqlite in WebKit source code | WebKit Bugzilla | bugs.webkit.org"
call:
function: DeleteFileFromGNOMEWebData
parameters:
file: cookies.sqlite
-
name: Clear GNOME Web bookmarks
docs: |-
Bookmarks are evidently stored in a file called `bookmarks.gvdb` [1].
See also [Bookmarks design | GNOME Wiki](https://web.archive.org/web/20221029214609/https://wiki.gnome.org/Design/Apps/Web/Bookmarks) to read more about GNOME Web bookmarks.
[1]: https://web.archive.org/web/20221029144626/https://gitlab.gnome.org/GNOME/epiphany/-/issues/198 "Discussion around bookmarks.gvdb | GNOME/epiphany | gitlab.gnome.org"
call:
function: DeleteFileFromGNOMEWebData
parameters:
file: bookmarks.gvdb
-
category: Clear Firefox history
docs: |-
This category encompasses a series of scripts aimed at helping users manage and delete their browsing history and related data in Mozilla Firefox.
The scripts are designed to target different aspects of user data stored by Firefox, providing users options for maintaining privacy and freeing up disk space.
children:
-
name: Clear Firefox cache
recommend: standard
docs: |-
The cache gets stored `.cache` folder, which you can see when you navigate to `about:cache` [1] [2].
[1]: https://web.archive.org/web/20221029145216/https://support.mozilla.org/en-US/questions/1317032 "How to locate and change Firefox Cache storage location | Firefox Support Forum | Mozilla Support | support.mozilla.org"
[2]: https://web.archive.org/web/20221029145237/https://wiki.archlinux.org/title/Firefox/Profile_on_RAM "Firefox/Profile on RAM | ArchWiki | wiki.archlinux.org"
code: |-
# Global installation
rm -rfv ~/.cache/mozilla/*
# Flatpak installation
rm -rfv ~/.var/app/org.mozilla.firefox/cache/*
# Snap installation
rm -rfv ~/snap/firefox/common/.cache/*
-
name: Clear Firefox crash reports
recommend: standard
docs: |-
Firefox stores crash reports in `~/.mozilla/firefox/Crash Reports/` to submit them later [1].
They are also seen to be stored in the profile directory [2].
You can run `about:crashes` in the address bar to see crash reports and their submission dates [1].
[1]: https://web.archive.org/web/20221029145258/https://support.mozilla.org/en-US/kb/mozillacrashreporter "Mozilla Crash Reporter | Firefox Help | support.mozilla.org"
[2]: https://web.archive.org/web/20221029145312/https://bugzilla.mozilla.org/show_bug.cgi?id=1653852#c16 "1653852 - Flatpak sandbox breaks crash reporting | Bugzilla | mozilla.org"
call:
-
function: RunInlineCode
parameters:
code: |-
# Global installation
rm -fv ~/.mozilla/firefox/Crash\ Reports/*
# Flatpak installation
rm -rfv ~/.var/app/org.mozilla.firefox/.mozilla/firefox/Crash\ Reports/*
# Snap installation
rm -rfv ~/snap/firefox/common/.mozilla/firefox/Crash\ Reports/*
-
function: DeleteFilesFromFirefoxProfiles
parameters:
pathGlob: crashes/*
-
function: DeleteFilesFromFirefoxProfiles
parameters:
pathGlob: crashes/events/*
-
name: Clear Firefox cookies
docs: |-
Firefox Cookies are stored in the `cookies.sqlite` database, within the 'moz_cookies' table [1].
[1]: https://web.archive.org/web/20221029140816/https://kb.mozillazine.org/Cookies.sqlite "Cookies.sqlite - MozillaZine Knowledge Base | kb.mozillazine.org"
call:
function: DeleteFilesFromFirefoxProfiles
parameters:
pathGlob: cookies.sqlite
-
name: Clear Firefox browsing history (URLs, downloads, bookmarks, visits, etc.)
# This script (name, documentation and code) is same in Linux and Windows collections.
# Changes should be done at both places.
# Marked: refactor-with-partials
docs: |-
This script targets the Firefox browsing history, including URLs, downloads, bookmarks, and site visits, by deleting specific database entries.
Firefox stores various user data in a file named `places.sqlite`. This file includes:
- Annotations, bookmarks, and favorite icons (`moz_anno_attributes`, `moz_annos`, `moz_favicons`) [1]
- Browsing history, a record of pages visited (`moz_places`, `moz_historyvisits`) [1]
- Keywords and typed URLs (`moz_keywords`, `moz_inputhistory`) [1]
- Item annotations (`moz_items_annos`) [1]
- Bookmark roots such as places, menu, toolbar, tags, unfiled (`moz_bookmarks_roots`) [1]
The `moz_places` table holds URL data, connecting to various other tables like `moz_annos`, `moz_bookmarks`, `moz_inputhistory`, and `moz_historyvisits` [2].
Due to these connections, the script removes entries from all relevant tables simultaneously to maintain database integrity.
**Bookmarks**: Stored across several tables (`moz_bookmarks`, `moz_bookmarks_folders`, `moz_bookmarks_roots`) [3], with additional undocumented tables like `moz_bookmarks_deleted` [4].
**Downloads**: Stored in the 'places.sqlite' database, within the 'moz_annos' table [5]. The entries in `moz_annos` are linked to `moz_places` that store the actual history entry
(`moz_places.id = moz_annos.place_id`) [6]. Associated URL information is stored within the 'moz_places' table [5]. Downloads have been historically stored in `downloads.rdf` for Firefox 2.x
and below [7], and `downloads.sqlite` later on [7].
**Favicons**: Older Firefox versions stored favicons in `places.sqlite` within the `moz_favicons` table [5], while newer versions use `favicons.sqlite` and the `moz_icons` table [5].
By executing this script, users can ensure their Firefox browsing history, bookmarks, and downloads are thoroughly removed, contributing to a cleaner and more private browsing experience.
[1]: https://web.archive.org/web/20221029141626/https://kb.mozillazine.org/Places.sqlite "Places.sqlite - MozillaZine Knowledge Base | kb.mozillazine.org"
[2]: https://web.archive.org/web/20221030160803/https://wiki.mozilla.org/images/0/08/Places.sqlite.schema.pdf "Places.sqlite.schema.pdf | Mozilla Wiki"
[3]: https://web.archive.org/web/20221029145432/https://wiki.mozilla.org/Places:BookmarksComments "Places:BookmarksComments | MozillaWiki | wiki.mozilla.org"
[4]: https://web.archive.org/web/20221029145447/https://github.com/mozilla/application-services/issues/514 "Add a `moz_bookmarks_deleted` table for tombstones · Issue #514 · mozilla/application-services | GitHub | github.com"
[5]: https://web.archive.org/web/20221029145535/https://www.foxtonforensics.com/browser-history-examiner/firefox-history-location "Mozilla Firefox History Location | Firefox History Viewer | foxtonforensics.com"
[6]: https://web.archive.org/web/20221029145550/https://support.mozilla.org/en-US/questions/1319253 "Where does Firefox store SQLITE download history | Firefox Support Forum | Mozilla Support | support.mozilla.org"
[7]: https://web.archive.org/web/20221029145712/https://kb.mozillazine.org/Downloads.rdf "Downloads.rdf | MozillaZine Knowledge Base | kb.mozillazine.org"
call:
-
function: DeleteFilesFromFirefoxProfiles
parameters:
pathGlob: downloads.rdf
-
function: DeleteFilesFromFirefoxProfiles
parameters:
pathGlob: downloads.sqlite
-
function: DeleteFilesFromFirefoxProfiles
parameters:
pathGlob: places.sqlite
-
function: DeleteFilesFromFirefoxProfiles
parameters:
pathGlob: favicons.sqlite
-
name: Clear Firefox logins
docs: |-
Logins for Firefox are saved in the `logins.json` file [1].
Older versions of Firefox stored logins in the `signons.sqlite` database, within the `moz_logins` table [1].
Back-ups are stored in the `logins-backup.json` file [2].
[1]: https://web.archive.org/web/20221029145535/https://www.foxtonforensics.com/browser-history-examiner/firefox-history-location "Mozilla Firefox History Location | Firefox History Viewer | foxtonforensics.com"
[2]: https://web.archive.org/web/20221029145757/https://bugzilla.mozilla.org/show_bug.cgi?id=1593467 "1593467 - Automatically restore from logins-backup.json when logins.json is missing or corrupt | Bugzilla | mozilla.org | bugzilla.mozilla.org"
call:
-
function: DeleteFilesFromFirefoxProfiles
parameters:
pathGlob: logins.json
-
function: DeleteFilesFromFirefoxProfiles
parameters:
pathGlob: logins-backup.json
-
function: DeleteFilesFromFirefoxProfiles
parameters:
pathGlob: signons.sqlite
-
name: Clear Firefox autocomplete history
docs: |-
The `formhistory.sqlite` file remembers what you have searched for in the Firefox search bar
and what information you've entered into website forms [1].
[1]: https://web.archive.org/web/20221029145152/https://support.mozilla.org/en-US/kb/profiles-where-firefox-stores-user-data "Profiles - Where Firefox stores your bookmarks, passwords and other user data | Firefox Help | support.mozilla.org"
call:
function: DeleteFilesFromFirefoxProfiles
parameters:
pathGlob: formhistory.sqlite
-
name: Clear Firefox "Multi-Account Containers" data
docs: |-
The `containers.json` file stores the details of containers used by the [Container Tabs](https://web.archive.org/web/20221029214648/https://support.mozilla.org/en-US/kb/containers) feature [1].
[1]: https://web.archive.org/web/20221029145152/https://support.mozilla.org/en-US/kb/profiles-where-firefox-stores-user-data "Profiles - Where Firefox stores your bookmarks, passwords and other user data | Firefox Help | support.mozilla.org"
call:
function: DeleteFilesFromFirefoxProfiles
parameters:
pathGlob: containers.json
-
name: Clear Firefox open tabs and windows data
docs: |-
The `sessionstore.jsonlz4` file stores the currently open tabs and windows [1].
See ["Restore previous session - Configure when Firefox shows your most recent tabs and windows"](https://web.archive.org/web/20221029220311/https://support.mozilla.org/en-US/kb/restore-previous-session).
[1]: https://web.archive.org/web/20221029145152/https://support.mozilla.org/en-US/kb/profiles-where-firefox-stores-user-data "Profiles - Where Firefox stores your bookmarks, passwords and other user data | Firefox Help | support.mozilla.org"
call:
function: DeleteFilesFromFirefoxProfiles
parameters:
pathGlob: sessionstore.jsonlz4
-
category: Clear system and kernel usage data
docs: |-
Your system (operating system along with other software on it) and kernel store
data that may reveal your behavior and can be considered sensitive. These scripts clean
up the data that could potentially expose your user data.
children:
-
name: Clear system crash report files
docs: |-
The `/var/crash` directory holds system crash dumps according to Filesystem Hierarchy Standard (FHS) [1].
You may get reports on a system's boot when crash report files exist.
When the `/var/crash` directory contains files, Apport will display notifications [2].
This directory is then cleaned up by Apport using [`/etc/cron.daily/apport`](https://web.archive.org/web/20221029220300/https://www.apt-browse.org/browse/ubuntu/precise/main/all/apport/2.0.1-0ubuntu5/file/etc/cron.daily/apport) job [6].
Read more: ["Apport | Ubuntu Wiki"](https://web.archive.org/web/20221029220354/https://wiki.ubuntu.com/Apport).
The folder typically contains kernel crash dumps [3], but it can be used by other applications as well.
E.g., the Debian package corekeeper stores user-space coredumps in subfolders of `/var/crash` [4].
Some systems, such as Ubuntu also put userspace crashes in this folder [5].
When using systemd to start services or processes, the crash logs are stored in the `/var/lib/systemd/coredump/`
directory [7].
[1]: https://web.archive.org/web/20221029145818/https://refspecs.linuxfoundation.org/FHS_2.3/fhs-2.3.html "Filesystem Hierarchy Standard | FHS | linuxfoundation.org"
[2]: https://web.archive.org/web/20221029150025/https://support.starlabs.systems/kb/guides/disable-program-problem-reports "Disable program problem reports | Star Labs | support.starlabs.systems"
[3]: https://web.archive.org/web/20221029150105/https://elinux.org/Crash_Diagnostics "Crash Diagnostics | eLinux.org"
[4]: https://web.archive.org/web/20221029150118/https://packages.debian.org/unstable/main/corekeeper "Details of package corekeeper in sid | packages.debian.org"
[5]: https://web.archive.org/web/20221029150311/https://wiki.ubuntu.com/AutomatedProblemReports "AutomatedProblemReports - Ubuntu Wiki | wiki.ubuntu.com"
[6]: https://web.archive.org/web/20221029150331/https://bugs.launchpad.net/apport/+bug/357024 "Bug #357024 (pertian7) “security hole in /etc/cron.daily/apport” : Bugs : Apport | bugs.launchpad.net"
[7]: https://web.archive.org/web/20221029211018/https://www.freedesktop.org/software/systemd/man/systemd-coredump.html "systemd-coredump | freedesktop.org"
code: |-
sudo rm -rfv /var/crash/*
sudo rm -rfv /var/lib/systemd/coredump/
-
name: Clear system logs (`journald`)
docs: |-
journald is the part of systemd that captures, queries, and removes logs when needed [1].
It allows removing logs by setting `--vacuum-time` [2].
systemd is also known as "System and Service Manager" and is a suite of basic building blocks for a Linux system [3].
systemd keeps files in two places: `/var/log/journal/` (persistently) and `/run/log/journal/` (volatilely, the data is lost when the system is rebooted) [4].
[1]: https://web.archive.org/web/20221029211624/https://docs.google.com/document/pub?id=1IC9yOXj7j6cdLLxWEBAGRL6wl97tFxgjLUEHIX3MSTs&pli=1 "Paper announcing journald | docs.google.com"
[2]: https://web.archive.org/web/20221029150611/https://wiki.archlinux.org/title/Systemd/Journal#Clean_journal_files_manually "systemd/Journal - ArchWiki | Arch Linux documentation | archlinux.org | wiki.archlinux.org"
[3]: https://web.archive.org/web/20221026211029/https://systemd.io/ "Systemd Homepage | systemd.io"
[4]: https://web.archive.org/web/20221029150659/https://www.freedesktop.org/software/systemd/man/systemd-journald.service.html "systemd-journald.service | freedesktop.org"
call:
-
function: RunIfCommandExists
parameters:
command: journalctl
code: sudo journalctl --vacuum-time=1s
-
function: RunInlineCode
parameters:
code: |-
sudo rm -rfv /run/log/journal/*
sudo rm -rfv /var/log/journal/*
-
name: Clear Zeitgeist data (activity logs)
recommend: strict
docs: |-
Zeitgeist logs files opened, websites visited, conversations, and emails and provides
this information over an API to applications [1] [2].
It serves as a comprehensive activity log and also makes it possible to determine
relationships between items based on usage patterns [2].
This script deletes indexes (`fts.index` directory). It's safe to delete and will
be regenerated the next time you start Zeitgeist [3].
This script also deletes all activity logs (`activity.sqlite`) and related user-data.
[1]: https://web.archive.org/web/20221029150843/https://zeitgeist.freedesktop.org/ "The Zeitgeist Project | freedesktop.org"
[2]: https://web.archive.org/web/20221029150843/https://packages.debian.org/sid/libdevel/libzeitgeist-2.0-dev "Debian -- Details of package libzeitgeist-2.0-dev in sid | packages.debian.org"
[3]: https://web.archive.org/web/20221029150959/https://bugs.launchpad.net/ubuntu/+source/zeitgeist/+bug/941643 "Bug #941643 “activity.sqlite-wal's size increments dramatically” : Bugs : zeitgeist package : Ubuntu | Ubuntu Zeitgeist Package | bugs.launchpad.net"
code: |-
sudo rm -rfv {/root,/home/*}/.local/share/zeitgeist
-
category: Clear recently used files list
docs: |-
Revealing data about recent files used by a user has privacy risks, such as exposing
your actions and files that you wish to keep private.
children:
-
name: Clear GTK recently used files list
recommend: strict
docs: |-
`recently-used.xbel` is part of the GTK+ toolkit [1] that's developed and used by GNOME [2].
<gtk-recent-manager> provides a facility for adding, removing, and looking up recently used files
and acts like a database of all the recently used files [3].
GTK is used by many GUI software. GNOME uses the GTK+ library [2], while KDE uses the QT library [4].
`recently-used.xbel` is used by other third-party GTK 3 based applications such as Firefox,
Visual Studio Code (and all other Electron applications [5]), Thunderbird…
See also: ["List of GTK applications | Wikipedia"](https://web.archive.org/web/20221029221112/https://en.wikipedia.org/wiki/List_of_GTK_applications).
[1]: https://web.archive.org/web/20221030164434/https://gitlab.gnome.org/GNOME/gtk/-/raw/1c3f179a20bf7537691216c28332f00c651a577f/gtk/gtkrecentmanager.c#L103 "Line 103 defines GTK_RECENTLY_USED_FILE as recently-used.xbel | GTK source code | gitlab.gnome.org"
[2]: https://web.archive.org/web/20221029151059/https://gtk.org/ "GTK homepage | gtk.org"
[3]: https://web.archive.org/web/20221029151529/https://www.gnu.org/software/guile-gnome/docs/gtk/html/GtkRecentManager.html "GtkRecentManager - Guile-Gtk | www.gnu.org"
[4]: https://web.archive.org/web/20221029151457/https://www.qt.io/faq/3.2.-why-do-you-have-an-agreement-with-kde-about-your-licensing-what-kde-is-and-whats-the-history-of-qt-and-kde "What's the history of Qt and KDE? | qt.io"
[5]: https://web.archive.org/web/20221029151534/https://github.com/electron/electron/issues/2927 "Consider replacing GTK2 w GTK3 in Linux builds · Issue #2927 · electron/electron | GitHub"
code: |-
# From global installations
rm -fv /.recently-used.xbel
rm -fv ~/.local/share/recently-used.xbel*
# From snap packages
rm -fv ~/snap/*/*/.local/share/recently-used.xbel
# From Flatpak packages
rm -fv ~/.var/app/*/data/recently-used.xbel
-
name: Clear KDE-tracked recently used items list
recommend: strict
docs: |-
`.desktop` files are used by KDE to store recent documents and are exposed through an API [1].
They are not only specific to the desktop environment, but also used by applications.
Likewise, they are used by the KDE implementation of QT components, such as [QFileDialog](https://web.archive.org/web/20221029221146/https://doc.qt.io/qt-5/qfiledialog.html)
([KFileWidget](https://web.archive.org/web/20221029221152/https://api.kde.org/frameworks/kio/html/classKFileWidget.html)) [1].
Furthermore, they are used by other [KDE apps](https://web.archive.org/web/20221029221245/https://apps.kde.org/) and can even be used by GTK applications [1].
[1]: https://web.archive.org/web/20221029151634/https://api.kde.org/frameworks/kio/html/classKRecentDocument.html "KIO - KRecentDocument Class Reference | api.kde.org"
code: |-
# From global installations
rm -rfv ~/.local/share/RecentDocuments/*.desktop
rm -rfv ~/.kde/share/apps/RecentDocuments/*.desktop
rm -rfv ~/.kde4/share/apps/RecentDocuments/*.desktop
# From snap packages
rm -fv ~/snap/*/*/.local/share/*.desktop
# From Flatpak packages
rm -rfv ~/.var/app/*/data/*.desktop
-
name: Empty trash
docs: |-
The trash location is standardized by ["The FreeDesktop.org Trash specification"](https://web.archive.org/web/20221029151648/https://specifications.freedesktop.org/trash-spec/trashspec-latest.html) [1].
It uses the `$XDG_DATA_HOME/Trash` directory [1], which defaults to `$HOME/.local/share/Trash` [2].
Flatpak applications may use the same trash using special APIs [3]. However, Snap applications do not have an API to
use the global trash [4].
[1]: https://web.archive.org/web/20221029151648/https://specifications.freedesktop.org/trash-spec/trashspec-latest.html "The FreeDesktop.org Trash specification | freedesktop.org"
[2]: https://web.archive.org/web/20221029151712/https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html "XDG Base Directory Specification | freedesktop.org"
[3]: https://web.archive.org/web/20221029151919/https://docs.flatpak.org/en/latest/portal-api-reference.html#gdbus-org.freedesktop.portal.Trash "Portal API Reference - Flatpak documentation | docs.flatpak.org"
[4]: https://web.archive.org/web/20221029151931/https://bugs.launchpad.net/snapd/+bug/1787903 "Bug #1787903 “Snapped application can't access user's trash can” : Bugs : snapd | bugs.launchpad.net"
code: |-
# Empty global trash
rm -rfv ~/.local/share/Trash/*
sudo rm -rfv /root/.local/share/Trash/*
# Empty Snap trash
rm -rfv ~/snap/*/*/.local/share/Trash/*
# Empty Flatpak trash (apps may not choose to use Portal API)
rm -rfv ~/.var/app/*/data/Trash/*
-
name: Clear global temporary folders
docs: |-
A temporary folder or temporary directory is a directory used to hold temporary files [1].
In Unix and Linux, the global temporary directories are `/tmp` [2] and `/var/tmp` [1]. Typically,
`/var/tmp` is for persistent files (as it may be preserved over reboots), and `/tmp` is for more
temporary files [1].
Programs do not assume that any files or directories in temporary folders are preserved between
invocations of the program, and these files may be deleted after reboot and in a site-specific manner [2].
See also: "[Filesystem Hierarchy Standard](https://web.archive.org/web/20221029152204/https://refspecs.linuxfoundation.org/FHS_3.0/fhs/ch03s18.html)".
[1]: https://web.archive.org/web/20221029152135/https://en.wikipedia.org/wiki/Temporary_folder "Temporary folder | Wikipedia | en.wikipedia.org"
[2]: https://web.archive.org/web/20221029152204/https://refspecs.linuxfoundation.org/FHS_3.0/fhs/ch03s18.html "Filesystem Hierarchy Standard | LinuxFoundation.org"
code: |-
sudo rm -rfv /tmp/*
sudo rm -rfv /var/tmp/*
-
category: Clear package manager data
docs: |-
Package managers store caches, statistics, and logs that may reveal data on how you use the package
managers and software downloaded from them, such as your choice of software.
children:
-
name: Clear YUM/RPM data
docs: |-
The Yellowdog Updater, Modified (YUM) is a free and open-source command-line package-management
utility for computers running the Linux operating system using the RPM Package Manager [1].
It has been shipped by default by distros such as Fedora, Rocky Linux, AlmaLinux, CentOS [2].
YUM stores cached packages, header files, and metadata to determine the remote availability of packages,
SQLite database cache, rpmdb cache [3]. Every YUM plugin may store its own cache [3]. `yum clean all`
cleans all temporary files.
See also: ["Yum Package Manager homepage"](https://web.archive.org/web/20221029221419/http://yum.baseurl.org/).
[1]: https://web.archive.org/web/20221029152219/https://en.wikipedia.org/wiki/Yum_%28software%29 "Yum | Wikipedia | en.wikipedia.org"
[2]: https://web.archive.org/web/20221029152251/https://webhome.phy.duke.edu/~rgb/General/yum_article/yum_article.pdf "YUM: Yellowdog Updater, Modified | www.phy.duke.edu"
[3]: https://web.archive.org/web/20221029152334/https://linux.die.net/man/8/yum "yum: Yellowdog Updater Modified - Linux man page | linux.die.net"
call:
function: RunIfCommandExists
parameters:
command: yum
code: yum clean all --enablerepo='*'
-
name: Clear DNF/RPM data
docs: |-
DNF or Dandified YUM is the next-generation version of YUM, a package manager for
.rpm-based Linux distributions [1].
It has been the default package manager since Fedora 22 in 2015, Red Hat Enterprise Linux 8,
and OpenMandriva [1].
DNF stores temporary files for repositories such as repository metadata, cache files
generated from the repository metadata, and cached packages [2]. `dnf clean all` cleans
all temporary files [2].
[1]: https://web.archive.org/web/20221029152448/https://en.wikipedia.org/wiki/DNF_%28software%29 "DNF (software) | Wikipedia | en.wikipedia.org"
[2]: https://web.archive.org/web/20221029152515/https://manpages.ubuntu.com/manpages/kinetic/en/man8/dnf.8.html "Ubuntu Manpage: dnf - DNF Command Reference | manpages.ubuntu.com"
call:
function: RunIfCommandExists
parameters:
command: dnf
code: dnf clean all --enablerepo='*'
-
category: Clear Snap data
docs: |-
Snap is a software packaging and deployment system developed by Canonical [1].
The packages are called snaps, and the tool for using them is called snapd [1].
Snap is available on many distros and is supported out-of-the-box by distros
such as Ubuntu, Kubuntu, Xubuntu, Manjaro, Zorin OS, KDE Neon and Solus among
others [1].
[1]: https://web.archive.org/web/20221029152606/https://en.wikipedia.org/wiki/Snap_%28software%29 "Snap | Wikipedia | en.wikipedia.org"
children:
-
name: Clear Snap cache
docs: |-
The Snap cache is stored at `/var/lib/snapd/cache/` [1].
Clearing the Snap cache is safe and can be done without causing any issues
while running Snap [2].
[1]: https://web.archive.org/web/20221029152638/https://github.com/snapcore/snapd/blob/76b081beee1899c573b42bf216b6e087656011e7/tests/main/auto-refresh-private/task.yaml#L74 "snapd source code | GitHub | github.com"
[2]: https://web.archive.org/web/20221029152651/https://forum.snapcraft.io/t/is-if-safe-for-me-to-remove-cache-files/7641/2 "Is if safe for me to remove cache files? - snapd - snapcraft.io | forum.snapcraft.io"
code: sudo rm -rfv /var/lib/snapd/cache/*
-
name: Remove old Snap packages
recommend: standard
docs: |-
This script removes all disabled Snap packages.
Old and unused snaps get "disabled" by Snap. This is due to the snapd that keeps
multiple revisions of the same package [1].
Disabled state means that the binaries and services of the snap will no longer be available [2].
But all the data is still available, and the snap can easily be enabled again [2].
[1]: https://web.archive.org/web/20221029153110/https://forum.snapcraft.io/t/configure-number-of-old-revisions-to-keep/2337/7 "Configure number of old revisions to keep - snapd | forum.snapcraft.io"
[2]: https://web.archive.org/web/20221029153125/https://www.mankier.com/8/snap#Commands-disable "snap man page - snapd - System Administration | ManKier | www.mankier.com"
call:
function: RunIfCommandExists
parameters:
command: snap
code: |-
snap list --all | while read name version rev tracking publisher notes; do
if [[ $notes = *disabled* ]]; then
sudo snap remove "$name" --revision="$rev";
fi
done
-
category: Clear Flatpak data
docs: |-
Flatpak, formerly known as xdg-app, is a utility for software deployment and package
management for Linux [1]. It is supported out-of-the-box by many Linux distributions
including CentOS, Clear Linux, elementary OS, Endless OS, Fedoora Workstation, Fedora
Silverblue, Linux Mint, Pop! OS, PureOS, SteamOS, Ubuntu MATE and Zorin OS [1].
[1]: https://web.archive.org/web/20221029153354/https://en.wikipedia.org/wiki/Flatpak "Flatpak - Wikipedia | en.wikipedia.org"
children:
-
name: Remove orphaned Flatpak runtimes
recommend: standard
docs: |-
This script removes runtimes and extensions that are not used by installed
applications by running `flatpak uninstall --unused` [1].
Flatpak doesn't automatically remove a runtime after the last application that
depends on it is uninstalled [2]. This may cause issues with disk space or leave
hints about what software has been installed before.
This happens because when a Flatpak package is uninstalled, its runtime dependencies
are not automatically uninstalled, as `flatpak uninstall` can uninstall either an
application or runtime [3].
[1]: https://web.archive.org/web/20221029153522/https://docs.flatpak.org/en/latest/flatpak-command-reference.html#flatpak-uninstall "Flatpak Command Reference - Flatpak documentation | docs.flatpak.org"
[2]: https://web.archive.org/web/20221029153359/https://github.com/flatpak/flatpak/issues/2639 "[RFE] Auto remove orphaned runtimes · Issue #2639 · flatpak/flatpak | GitHub | github.com"
[3]: https://web.archive.org/web/20221029153507/https://docs.flatpak.org/en/latest/using-flatpak.html#troubleshooting "Using Flatpak - Flatpak documentation | docs.flatpak.org"
call:
function: RunIfCommandExists
parameters:
command: flatpak
code: flatpak uninstall --unused --noninteractive
-
name: Clear Flatpak cache
docs: |-
This script clears the Flatpak cache.
Flatpak creates temporary files as `/var/tmp/flatpak-cache-*` [1].
These files can fill up a large portion of the disk [1], and reveal usage patterns.
Flatpak stores cache files in `~/.cache/flatpak/system-cache/` which replaces the directory
used in older versions (`~/.local/share/flatpak/system-cache/`) [2].
[1]: https://web.archive.org/web/20221029153602/https://github.com/flatpak/flatpak/issues/1119 "Prevent /var/tmp/flatpak-cache from piling up · Issue #1119 · flatpak/flatpak | GitHub | github.com"
[2]: https://web.archive.org/web/20221029153627/https://github.com/flatpak/flatpak/commit/1a49029f9d8fbee0338665522cf7432ae7485841 "Move caches to ~/.cache · flatpak/flatpak@1a49029 · GitHub | github.com"
code: |-
# Temporary cache
sudo rm -rfv /var/tmp/flatpak-cache-*
# New cache
rm -rfv ~/.cache/flatpak/system-cache/*
# Old cache
rm -rfv ~/.local/share/flatpak/system-cache/*
-
category: Clear APT data
docs: |-
Advanced Package Tool (APT) is a free software user interface that works with
core libraries to handle the installation and removal of software on Debian, and
Debian-based Linux distributions [1].
See also: ["APT | Debian Wiki"](https://web.archive.org/web/20221029221422/https://wiki.debian.org/Apt).
[1]: https://web.archive.org/web/20221029153651/https://en.wikipedia.org/wiki/APT_%28software%29 "APT | Wikipedia"
children:
-
name: Clear obsolete APT packages
recommend: standard
docs: |-
This script runs the `autoclean` command which removes package files that can no longer be downloaded,
and are largely useless [1]. This allows a cache to be maintained over a long period without it
growing out of control [1].
[1]: https://web.archive.org/web/20221029153705/https://manpages.ubuntu.com/manpages/jammy/en/man8/apt-get.8.html "Ubuntu Manpage: apt-get - APT package handling utility | manpages.ubuntu.com"
call:
function: RunIfCommandExists
parameters:
command: apt-get
code: sudo apt-get autoclean
-
name: Clear APT package file lists
docs: |-
This script removes package file lists. APT stores a copy of those files (in `/var/lib/apt/lists/`)
and searches are done within those local files to avoid going through the network for every search [1].
An `apt-get update` will repopulate the necessary information and recreate the list file [2].
The list files should be recreated as they get lost over time [2].
[1]: https://web.archive.org/web/20221029153731/https://www.debian.org/doc/manuals/debian-handbook/sect.apt-cache.en.html "6.3. The apt-cache Command | Debian Handbook | www.debian.org"
[2]: https://web.archive.org/web/20221029154335/https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=775163 "#775163 - apt pigs out in /var, particularly with multi-arch - Debian Bug report logs | bugs.debian.org"
code: sudo rm -rfv /var/lib/apt/lists/*
-
name: Clear orphaned APT package dependencies
recommend: standard
docs: |-
This script runs the `autoremove` command, which removes packages that were automatically installed
to satisfy dependencies for other packages and are now no longer needed [1].
This script also purges removed packages, which means that the configuration files of the removed
packages are deleted too [1].
[1]: https://web.archive.org/web/20221029153705/https://manpages.ubuntu.com/manpages/jammy/en/man8/apt-get.8.html "Ubuntu Manpage: apt-get - APT package handling utility | manpages.ubuntu.com"
call:
function: RunIfCommandExists
parameters:
command: apt-get
code: sudo apt-get -y autoremove --purge
-
name: Clear cache for APT packages
docs: |-
This script runs the `clean` command. It clears out the local repository of retrieved package files [1],
meaning that it deletes downloaded packages (`.deb`) already installed (and no longer needed) [2].
It clears the whole `/var/cache/apt/archives/` directory that contains a copy of each downloaded `.deb` file [2].
It clears the cache but does not delete the lists [3].
[1]: https://web.archive.org/web/20221029153705/https://manpages.ubuntu.com/manpages/jammy/en/man8/apt-get.8.html "Ubuntu Manpage: apt-get - APT package handling utility | manpages.ubuntu.com"
[2]: https://web.archive.org/web/20221030163316/https://www.debian.org/doc/manuals/debian-handbook/sect.apt-get.en.html "6.2. aptitude, apt-get, and apt Commands | Debian Handbook | Debian"
[3]: https://web.archive.org/web/20221029154423/https://lists.debian.org/debian-user/2015/09/msg00024.html "Re: /var/lib/apt/lists/partial fills entire partition | Debian Issues"
call:
function: RunIfCommandExists
parameters:
command: apt-get
code: sudo apt-get clean
-
category: Clear shared caches
docs: |-
The scripts in this category bulk delete all cache entries for the given scope.
These scripts are designed to affect more than a single application and do a wide range of cleaning.
children:
-
name: Clear user-specific cache
docs: |-
User-specific non-essential data is stored in `$XDG_CACHE_HOME`, which defaults to `$HOME/.cache` [1].
Even though this data should be safe to delete, an application might still not comply with the standard
and put anything in the cache folder, but this is very rare.
This cache is used by both the operating system and different applications on it, e.g., used by KDE since v5.0 [2],
pip (Python package manager) [3], or Google Chrome and Chromium-based browsers.
Deleting this cache does not affect sandboxed applications, e.g., those that are installed using Snap or Flatpak.
[1]: https://web.archive.org/web/20221029151712/https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html "XDG Base Directory Specification | specifications.freedesktop.org"
[2]: https://web.archive.org/web/20221029154505/https://wiki.archlinux.org/title/KDE#Clean_cache_to_resolve_upgrade_problems "KDE - ArchWiki | wiki.archlinux.org"
[3]: https://web.archive.org/web/20221029154542/https://pip.pypa.io/en/stable/topics/caching/#default-paths "Caching - pip documentation v22.2.2 | pip.pypa.io"
[4]: https://web.archive.org/web/20221029154556/https://chromium.googlesource.com/chromium/src/+/master/docs/user_data_dir.md#Linux "Chromium Docs - User Data Directory | chromium.googlesource.com"
code: |-
rm -rfv ~/.cache/*
sudo rm -rfv root/.cache/*
-
name: Clear system-wide cache
docs: |-
The `/var/cache` directory contains cached files, i.e. files that were generated and can be
re-generated at any time, but they are worth storing to save time recomputing them [1].
The application must be able to regenerate or restore the data [2], so the system can delete
the contents of /var/cache either periodically or when its contents get too large [1].
However, there is no guarantee that applications will follow the specification, but this is
very rare.
It's not only used by applications but also by the operating system. This may include OS folders
such as [2]:
- Locally-generated fonts (`/var/cache/fonts`)
- Locally-formatted manual pages (`/var/cache/man`)
- WWW proxy or cache data (`/var/cache/www`)
[1]: https://web.archive.org/web/20130511220135/http://www.lindevdoc.org/wiki//var/cache "/var/cache - Linux Developer's Documentation"
[2]: https://web.archive.org/web/20221029154623/https://refspecs.linuxfoundation.org/FHS_3.0/fhs/ch05s05.html "5.5. /var/cache : Application cache data | refspecs.linuxfoundation.org"
code: rm -rf /var/cache/*
-
name: Clear Flatpak application cache
docs: |-
Non-essential user-specific data is stored in `~/.var/app/<app-id>/cache` by Flatpak applications [1].
This directory points to `XDG_CACHE_HOME` [1] from the XDG base directory specification [2].
[1]: https://web.archive.org/web/20221029154654/https://docs.flatpak.org/en/latest/conventions.html#xdg-base-directories "Requirements & Conventions - Flatpak documentation | docs.flatpak.org"
[2]: https://web.archive.org/web/20221029151712/https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html "XDG Base Directory Specification | specifications.freedesktop.org"
code: rm -rfv ~/.var/app/*/cache/*
-
name: Clear Snap application cache
docs: |-
Application caches are isolated per application and stored in the `~/snaps/APP-NAME/VERSION/.cache`
folders for Snap applications [1].
[1]: https://web.archive.org/web/20221029154850/https://bugs.launchpad.net/snappy/+bug/1744584 "Bug #1744584 “Exclude Snap .cache from Dejadup backups” : Bugs : Snappy | bugs.launchpad.net/snappy"
code: rm -fv ~/snap/*/*/.cache/*
-
name: Clear thumbnails (icon cache)
docs: |-
Thumbnails are reduced-size versions of pictures or videos, used to help in recognizing and organizing
them, serving the same role for images as a normal text index does for words [1].
Depending on the program that processes the thumbnails, the "icons" are usually located either in the
`~/.cache/thumbnails/` folder (e.g., Nautilus from GNOME does this [2] [3]) or the `~/.thumbnails/`
directory [4].
[1]: https://web.archive.org/web/20221029154942/https://en.wikipedia.org/wiki/Thumbnail "Thumbnail - Wikipedia | en.wikipedia.org"
[2]: https://web.archive.org/web/20221029154933/https://wiki.archlinux.org/title/GNOME/Files#Thumbnails "GNOME/Files - ArchWiki | wiki.archlinux.org"
[3]: https://web.archive.org/web/20221030163411/https://gitlab.gnome.org/GNOME/nautilus/-/issues/1237 "Unable to generate thumbnails (#1237) · Issues · GNOME / Files · GitLab | gitlab.gnome.org"
[4]: https://web.archive.org/web/20221029155859/https://bugs.kde.org/show_bug.cgi?id=79943 "79943 - It should be possible to limit the amount of disk space used by thumbnails (.thumbnails directory) | bugs.kde.org"
code: |-
rm -rfv ~/.thumbnails/*
rm -rfv ~/.cache/thumbnails/*
-
name: Clear screenshots
docs: |-
GNOME's default screenshot folder (as seen in Pop!_OS and Elementary OS) is `~/Pictures/Screenshots/` [1].
Flameshot also uses the same default folder as GNOME [2].
Despite being GNOME-based, Ubuntu changes this default to `~/Pictures/` with files that
look like "`Screenshot from ***.png`" [3].
KDE ([Spectacle](https://web.archive.org/web/20221029221516/https://apps.kde.org/spectacle/))
saves screenshots in the `~/Pictures/` folder with the default name format of
`Screenshot_%Y%M%D_%H%m%S.**` [4].
Other applications use different paths, e.g. ksnip uses `ksnip_$Y$M$D-$T.png` by
default in the home folder [5].
[1]: https://web.archive.org/web/20221030163430/https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/1950 "Save screenshots to dedicated Screenshots folder (#1950) · Issues · GNOME / gnome-shell | gitlab.gnome.org"
[2]: https://web.archive.org/web/20221029155930/https://github.com/flameshot-org/flameshot/blob/fa6164bedf683d4deb9c879563506310908280bf/README.md#on-kde-plasma-desktop "flameshot/README.md · flameshot-org/flameshot | GitHub"
[3]: https://web.archive.org/web/20221029160024/https://help.ubuntu.com/stable/ubuntu-help/screen-shot-record.html "Screenshots and screencasts | help.ubuntu.com"
[4]: https://web.archive.org/web/20221029160018/https://docs.kde.org/stable5/en/spectacle/spectacle/ch04s02.html "Configure | docs.kde.org"
[5]: https://web.archive.org/web/20221029160052/https://github.com/ksnip/ksnip/blob/89b7f3f1f5efc0c62797c091e985dc70be17e347/src/backend/config/Config.cpp#L232-L241 "ksnip/Config.cpp · ksnip/ksnip | GitHub"
code: |-
# Clear default directory for GNOME screenshots
rm -rfv ~/Pictures/Screenshots/*
if [ -d ~/Pictures ]; then
# Clear Ubuntu screenshots
find ~/Pictures -name 'Screenshot from *.png' | while read -r file_path; do
rm -fv "$file_path" # E.g. Screenshot from 2022-08-20 02-46-41.png
done
# Clear KDE (Spectatle) screenshots
find ~/Pictures -name 'Screenshot_*' | while read -r file_path; do
rm -fv "$file_path" # E.g. Screenshot_20220927_205646.png
done
fi
# Clear ksnip screenshots
find ~ -name 'ksnip_*' | while read -r file_path; do
rm -fv "$file_path" # E.g. ksnip_20220927-195151.png
done
-
category: Disable OS data collection
docs: |-
All operating systems collect data. This is part of their work. Sometimes, this data has
high privacy implications, especially when it is submitted to third parties. Some Linux
distributions come with out-of-the-box data collection and submission. Most of the time,
this data collection is opt-in, but not necessarily always.
Data collection and telemetry is not always a bad thing, and can help developers provide
better software that can compete with proprietary and much more privacy-invasive alternatives.
children:
-
category: Disable Debian telemetry
docs: |-
Debian, also known as Debian GNU/Linux, is a Linux distribution composed of free and open-source
software, developed by the community-supported Debian Project [1].
Debian-based distributions include Ubuntu, Kali Linux, MX Linux, Pardus, Parrot OS, PureOS,
Raspberry Pi OS, TAILS, and others [2].
Debian contains some telemetry client libraries, and some packages depend or build-depend on them [3].
Some pre-installed packages send data or facilitate sending data, which may risk your privacy to some
extent [4].
[1]: https://web.archive.org/web/20221029160202/https://en.wikipedia.org/wiki/Debian "Debian - Wikipedia | en.wikipedia.org"
[2]: https://web.archive.org/web/20221029160241/https://en.wikipedia.org/wiki/List_of_Linux_distributions#Ubuntu-based "List of Linux distributions - Wikipedia | en.wikipedia.org"
[3]: https://web.archive.org/web/20221029160255/https://wiki.debian.org/PrivacyIssues#Telemetry_libraries "Privacy Issues | Debian Wiki | wiki.debian.org"
[4]: https://web.archive.org/web/20221030133248/https://www.debian.org/legal/privacy "Debian -- Privacy Policy | www.debian.org"
children:
-
category: Disable sending of package statistics (popcon)
docs: |-
Popularity Contest (or popcon) collects statistical data to determine which packages are the most popular [1].
It sends a list of packages installed and the access and change times of relevant files to the server via email
in different distros such as Debian and Ubuntu [2].
`popularity-contest` package sets up a cron job that will periodically anonymously submit statistical data
to the Debian developers about the statistics of the most used Debian packages on the system [3]. It also sends
data about the system architecture and the version of popularity-contest [4].
Communication is encrypted but with the right configuration and software, but if that's not the case, communication
can be eavesdropped as it does not use HTTPS but HTTP [4].
Statistics are publicly accessible and can be seen online:
- [Ubuntu](https://web.archive.org/web/20220816072409/https://popcon.ubuntu.com/)
- [Debian](https://web.archive.org/web/20221029221738/https://popcon.debian.org/)
See also: "[popularity-contest source code | debian.org](https://web.archive.org/web/20221030163518/https://salsa.debian.org/popularity-contest-team/popularity-contest)".
[1]: https://web.archive.org/web/20221029160500/https://help.ubuntu.com/community/UbuntuPopularityContest "UbuntuPopularityContest - Community Help Wiki | help.ubuntu.com"
[2]: https://web.archive.org/web/20221029160506/https://manpages.debian.org/testing/popularity-contest/popularity-contest.8.en.html "popularity-contest - Debian testing | Debian Manpages"
[3]: https://web.archive.org/web/20221029160859/https://packages.debian.org/buster/popularity-contest "Debian - Details of package popularity-contest in buster | packages.debian.org"
[4]: https://web.archive.org/web/20221029160841/https://popcon.debian.org/FAQ "FAQ | popcon | popcon.debian.org"
children:
-
name: Disable participation in Popularity Contest
recommend: standard
docs: |-
`popularity-contest` checks `/etc/popularity-contest.conf` for the value of `PARTICIPATE` to send data [1].
Configuring this configuration allows you to opt out of the submission of data [1].
[1]: https://web.archive.org/web/20221029161047/https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=172824 "#172824 - popularity-contest: dpkg-reconfigure popularity-contest does not include PARTICIPATE=yes - Debian Bug report logs | bugs.debian.org"
code: |-
config_file='/etc/popularity-contest.conf'
if [ -f "$config_file" ]; then
sudo sed -i '/PARTICIPATE/c\PARTICIPATE=no' "$config_file"
else
echo "Skipping because configuration file at ($config_file) is not found. Is popcon installed?"
fi
revertCode: |-
config_file='/etc/popularity-contest.conf'
if [ -f "$config_file" ]; then
sudo sed -i 's/PARTICIPATE=no/PARTICIPATE=yes/g' "$config_file"
else
echo "Skipping because configuration file ($config_file) is not found. Is popcon installed?"
fi
-
name: Remove Popularity Contest (`popcon`) package
recommend: strict
docs: |-
This script deletes the `popularity-contest` package.
This package submits to the Debian developers statistics about the most used Debian packages on the system [1].
According to community reports, deleting this package does not have any side effects [2].
[1]: https://web.archive.org/web/20221029161449/https://packages.debian.org/sid/popularity-contest "Debian -- Details of package popularity-contest in sid | packages.debian.org"
[2]: https://web.archive.org/web/20221029161049/https://askubuntu.com/questions/84831/removing-popularity-contest-without-trashing-the-system "apt - Removing popularity-contest without trashing the system? - Ask Ubuntu | askubuntu.com"
call:
function: UninstallAptPackage
parameters:
packageName: popularity-contest
-
name: Remove daily cron entry for Popularity Contest (popcon)
recommend: strict
docs: |-
Normally, `popularity-contest` is run from a cron job, `/etc/cron.daily/popularity-contest` [1].
This job automatically submits the results to package maintainers once a week [1].
This script disables the cronjob, thus the automatic submission, but manually running `popularity-contest`
would still send data.
[1]: https://web.archive.org/web/20221029160506/https://manpages.debian.org/testing/popularity-contest/popularity-contest.8.en.html "popularity-contest - Debian testing | Debian Manpages | manpages.debian.org"
call:
function: DisableCronjob
parameters:
jobName: popularity-contest
-
category: Disable reportbug (opt-in telemetry)
docs: |-
These scripts disable the functionality of reportbug.
reportbug is a tool for reporting bugs on Debian and derivative distributions [1].
It communicates with the [Debian Bug Tracking System](https://web.archive.org/web/20221029221811/https://www.debian.org/Bugs/),
which is used for both reporting and researching bugs, through a number of interfaces, including email, web, and command-line
utilities [1].
By default, it creates an email to the Debian bug tracking system at `submit@bugs.debian.org` with
information about the bug and makes a carbon copy of the report [2].
[1]: https://web.archive.org/web/20221029161457/https://wiki.debian.org/reportbug "reportbug - Debian Wiki | wiki.debian.org"
[2]: https://web.archive.org/web/20221029161559/https://manpages.ubuntu.com/manpages/trusty/man1/reportbug.1.html "Ubuntu Manpage: reportbug - reports a bug to a debbugs server | manpages.ubuntu.com"
children:
-
name: Remove `reportbug` package
recommend: strict
docs: |-
This script uninstalls `reportbug` package, which includes the tool itself.
It depends on `python3-reportbug`, so after removing this package, the Python modules may be left on the system [1].
[1]: https://web.archive.org/web/20221029161615/https://packages.debian.org/buster/reportbug "Debian -- Details of package reportbug in buster | packages.debian.org"
call:
function: UninstallAptPackage
parameters:
packageName: reportbug
-
name: Remove Python modules for `reportbug`
recommend: strict
docs: |-
This script uninstalls `python3-reportbug`.
This package includes Python modules that may be reusable by other tools that want to interact with the Debian bug
tracking system [1].
[1]: https://web.archive.org/web/20221029161637/https://packages.debian.org/buster/python3-reportbug "Debian -- Details of package python3-reportbug in buster | packages.debian.org"
call:
function: UninstallAptPackage
parameters:
packageName: python3-reportbug
-
name: Remove UI for reportbug (`reportbug-gtk` package)
recommend: strict
docs: |-
This script uninstalls `reportbug-gtk`. It consists of a desktop file and an icon, and it has dependencies to enable the
GTK+ UI mode of reportbug to work [1].
This package depends on `reportbug` and is unusable without it.
[1]: https://web.archive.org/web/20221029161725/https://packages.debian.org/buster/reportbug-gtk "Debian -- Details of package reportbug-gtk in buster | packages.debian.org"
call:
function: UninstallAptPackage
parameters:
packageName: reportbug-gtk
-
category: Disable Arch Linux telemetry
docs: |-
Arch Linux is an independently developed, x86-64 general-purpose Linux distribution that strives to
provide the latest stable versions of most software by following a rolling-release model [1]. The default
installation is a minimal base system, configured by the user to only add what is specifically required.
[1]: https://web.archive.org/web/20221029161747/https://en.wikipedia.org/wiki/Arch_Linux "Arch Linux | Wikipedia | en.wikipedia.org"
children:
-
category: Disable `pkgstats` that collects installed package list (opt-in)
docs: |-
`pkgstats` sends a list of all installed packages, the architecture, and the mirror you are using to
the Arch Linux project [1]. It stores personally identifiable information such as IP addresses for
one month [2] and then anonymizes and aggregates the data [1] [2].
[1]: https://web.archive.org/web/20221029161806/https://wiki.archlinux.org/title/Pkgstats "pkgstats - ArchWiki | wiki.archlinux.org"
[2]: https://web.archive.org/web/20221029161821/https://pkgstats.archlinux.de/privacy-policy "Privacy policy | pkgstats | pkgstats.archlinux.de"
children:
-
name: Remove `pkgstats` package
recommend: strict
docs: |-
`pkgstats` package submits a list of installed packages to the Arch Linux project [1].
It's available in the Arch Linux repository [1].
The package enables a timer to send data periodically [2].
[1]: https://web.archive.org/web/20221029161948/https://archlinux.org/packages/extra/x86_64/pkgstats/ "Arch Linux - pkgstats 3.2.6-1 (x86_64) | archlinux.org"
[2]: https://web.archive.org/web/20221029161923/https://bugs.archlinux.org/task/51510?project=1&string=pkgstats "FS#51510 : [pkgstats] do not enable pkgstats.timer during install | bugs.archlinux.org"
call:
function: UninstallPacmanPackage
parameters:
packageName: pkgstats
-
name: Disable weekly `pkgstats` submission
recommend: standard
docs: |-
`pkgstats` is set up to automatically run every week using systemd/timers [1]. Once disabled,
the data will only be sent once manually invoked [1]. The weekly timer is named `pkgstats.timer` [2].
[1]: https://web.archive.org/web/20221029161806/https://wiki.archlinux.org/title/Pkgstats "pkgstats - ArchWiki | wiki.archlinux.org"
[2]: https://web.archive.org/web/20221029162027/https://pkgstats.archlinux.de/ "Arch Linux package statistics | pkgstats.archlinux.de"
call:
function: DisableSystemdService
parameters:
serviceName: pkgstats.timer
-
category: Disable Zorin OS telemetry
docs: |-
Zorin OS is a Linux distribution based on Ubuntu [1].
It is customized to help users transition from Windows and macOS easily [1].
[1]: https://web.archive.org/web/20221029162035/https://en.wikipedia.org/wiki/Zorin_OS "Zorin OS - Wikipedia | en.wikipedia.org"
children:
-
name: Disable Zorin OS census pings
docs: |-
Zorin OS pings Zorin OS servers [1].
It sends pings on an hourly basis [2].
It sends a unique ID, the operating system version, the number of user accounts and the city and country the user is in [3].
It can be disabled by deleting the `zorin-os-census` package [1].
[1]: https://web.archive.org/web/20221029162136/https://zorin.com/legal/privacy/ "Privacy Policy - Zorin | zorin.com"
[2]: https://web.archive.org/web/20221029162148/https://launchpad.net/~zorinos/+archive/ubuntu/stable/+sourcepub/7408190/+listing-archive-extra "Zorin OS source code | launchpad.net"
[3]: https://web.archive.org/web/20221029162231/https://launchpadlibrarian.net/425925849/zorin-os-census_1.1~zorinos15_1.2.diff.gz "Zorin OS source code | launchpad.net"
call:
function: UninstallAptPackage
parameters:
packageName: zorin-os-census
-
name: Remove Zorin OS census unique ID
docs: |-
Census submits a unique ID associated with the installation when pings are sent [1].
Removing the identifier reduces the risk of your computer being identified.
[1]: https://web.archive.org/web/20221029162231/https://launchpadlibrarian.net/425925849/zorin-os-census_1.1~zorinos15_1.2.diff.gz "Zorin OS source code | launchpad.net"
code: sudo rm -fv '/var/lib/zorin-os-census/uuid'
revertCode: |-
if [ -f /var/lib/zorin-os-census/uuid ]; then
echo 'Skipping, uuid already exists.'
else
sudo mkdir -p /var/lib/zorin-os-census
uuidgen | sudo tee /var/lib/zorin-os-census/uuid > /dev/null
fi
-
category: Disable Ubuntu telemetry
docs: |-
Ubuntu is a Linux distribution based on Debian and composed mostly of free and open-source software [1].
Ubuntu, along with its upstream Debian, has many official (Kubuntu, Lubuntu, Ubuntu Studio…) and unofficial
(elementary OS, KDE neon, Linux Mint, Pop! OS, Zorin OS…) derivatives [2].
[1]: https://web.archive.org/web/20221029162338/https://en.wikipedia.org/wiki/Ubuntu "Ubuntu - Wikipedia | en.wikipedia.org"
[2]: https://web.archive.org/web/20221029160241/https://en.wikipedia.org/wiki/List_of_Linux_distributions#Ubuntu-based "List of Linux distributions - Wikipedia | en.wikipedia.org"
children:
-
name: Disable online search result collection (collects queries)
recommend: strict
docs: |-
Online search is introduced in Ubuntu Lens in Ubuntu 12.10 [1]. It has been known as "Shopping Lens",
"Online Search Results" and "More Suggestions" [1]. The search data is sent to `productsearch.ubuntu.com` [1].
Online search results are considered a privacy concern by governments [2] and can be disabled using the
`remote-content-search` option [2].
[1]: https://web.archive.org/web/20221029162420/https://help.ubuntu.com/community/UbuntuLens "UbuntuLens - Community Help Wiki | help.ubuntu.com"
[2]: https://web.archive.org/web/20221029162443/https://www.gov.uk/government/publications/end-user-devices-security-guidance-ubuntu-1404-lts/end-user-devices-guidance-ubuntu-1404-lts "End User Devices Guidance: Ubuntu 14.04 LTS | gov.uk"
call:
function: RunIfCommandExists
parameters:
command: gsettings
code: gsettings set com.canonical.Unity.Lenses remote-content-search none
revertCode: gsettings set com.canonical.Unity.Lenses remote-content-search all
-
category: Disable metrics reporting in Ubuntu
docs: |-
`ubuntu-report` reports hardware and other collected metrics like installer or upgrade information [1].
Reported data includes but is not limited to [2]:
- The Ubuntu version and its flavor,
- Whether there is network connectivity,
- CPU family,
- RAM,
- Disk(s) size,
- Screen(s) resolution,
- GPU model and manufacturer,
- OEM manufacturer,
- Location (based on the location selection made by the user at install),
- Installation duration (time taken),
- Whether auto-login is enabled,
- Selected disk layout,
- Whether third-party software is selected,
- Whether to download updates during installation,
- Whether LivePatch is enabled.
See also:
- [Source code for the Ubuntu Report tool | github.com](https://web.archive.org/web/20221029221854/https://github.com/ubuntu/ubuntu-report/)
- [Statistics gathered and visualized | ubuntu.com/desktop/statistics](https://web.archive.org/web/20221029221910/https://ubuntu.com/desktop/statistics)
- [ubuntu-devel mailing list thread where ubuntu-report was first proposed, | lists.ubuntu.com ](https://web.archive.org/web/20221029221924/https://lists.ubuntu.com/archives/ubuntu-devel/2018-February/040139.html)
[1]: https://web.archive.org/web/20221029162505/https://github.com/ubuntu/ubuntu-report/blob/30e902ebc17e4e10d83392d7cd3dc05fc9e35cc4/README.md "ubuntu-report/README.md at master · ubuntu/ubuntu-report | github.com"
[2]: https://web.archive.org/web/20221029162538/https://github.com/ubuntu/ubuntu-report/blob/8e6030ff9bbeacacf41a9b58ea638a5c9a6f864d/README.md "More diagnostics data from desktop | lists.ubuntu.com"
children:
-
name: Disable participation in metrics reporting in Ubuntu
recommend: standard
docs: |-
This script uses the `ubuntu-report` CLI to opt you out of data submission [1].
Alternatively, one can opt out during the installation of Ubuntu [2].
[1]: https://web.archive.org/web/20221029162538/https://github.com/ubuntu/ubuntu-report/blob/8e6030ff9bbeacacf41a9b58ea638a5c9a6f864d/README.md#synopsis-1 "ubuntu-report/README.md at 8e6030ff9bbeacacf41a9b58ea638a5c9a6f864d · ubuntu/ubuntu-report | GitHub"
[2]: https://web.archive.org/web/20221029162523/https://lists.ubuntu.com/archives/ubuntu-devel/2018-February/040139.html "More diagnostics data from desktop | lists.ubuntu.com"
call:
function: RunIfCommandExists
parameters:
command: ubuntu-report
code: |-
if ubuntu-report -f send no; then
echo 'Successfully opted out.'
else
>&2 echo 'Failed to opt out.'
fi
revertCode: |-
if ubuntu-report -f send yes; then
echo 'Successfully opted in.'
else
>&2 echo 'Failed to opt in.'
fi
-
name: Remove Ubuntu Report tool (`ubuntu-report`)
recommend: strict
docs: |-
`ubuntu-report` is installed as an apt package and can be uninstalled in this way [1].
Once uninstalled, the `send` command [2] will function and therefore no data will be collected.
[1]: https://web.archive.org/web/20221029162615/https://packages.ubuntu.com/bionic/ubuntu-report "Ubuntu - Details of package ubuntu-report in bionic | packages.ubuntu.com"
[2]: https://web.archive.org/web/20221029162538/https://github.com/ubuntu/ubuntu-report/blob/8e6030ff9bbeacacf41a9b58ea638a5c9a6f864d/README.md#ubuntu-report-send "ubuntu-report/README.md at 8e6030ff9bbeacacf41a9b58ea638a5c9a6f864d · ubuntu/ubuntu-report | GitHub"
call:
function: UninstallAptPackage
parameters:
packageName: ubuntu-report
-
category: Disable Ubuntu error tracker
docs: |-
Ubuntu's error tracker explains crashes, hangs, and other severe errors to end users; lets
them report an error; and collects these reports and shares them with Ubuntu [1]. Error reports
are also accessible to trusted Ubuntu developers who are not employed by Canonical [1].
See ["the Ubuntu error tracker | errors.ubuntu.com"](https://web.archive.org/web/20221029221957/https://errors.ubuntu.com/) that shows error
statistics to the public.
[1]: https://web.archive.org/web/20221029162649/https://wiki.ubuntu.com/ErrorTracker
children:
-
category: Disable creating crash reports to send (Apport)
docs: |-
Apport intercepts program crashes, collects debugging information about the
crash and the operating system environment, and sends it to bug trackers in a
standardized form [1]. It also allows the user to report a bug about a package
by collecting as much information about it as possible [1].
Disabling Apport prevents the UI which informs the user about the crash and instructs
them on how to proceed because that dialog is part of Apport [2] [3]. Furthermore,
Apport creates crash report files in the `/var/crash` directory, and having files
in this directory causes an error message to appear every time Ubuntu boots [4].
Apport collects potentially sensitive data, such as core dumps, stack traces,
and log files [2]. It can contain passwords, credit card numbers, serial numbers,
and other private information [2].
Bug reports are shared with the [Ubuntu bug triaging team](https://web.archive.org/web/20221029222122/https://launchpad.net/~ubuntu-crashes-universe) [2].
Apport is disabled by default in stable releases due to the sensitive data it collects [2].
Apport only uploads data if the package `whoopsie` is installed; otherwise it appears
to be uploading but does not upload [3].
[1]: https://web.archive.org/web/20221029162724/https://github.com/canonical/apport/blob/75540cb0f665e50495d994b529c8418a1ebca178/README.md "apport/README.md at main · canonical/apport | GitHub | github.com"
[2]: https://web.archive.org/web/20221029162740/https://wiki.ubuntu.com/Apport "Apport - Ubuntu Wiki | wiki.ubuntu.com"
[3]: https://web.archive.org/web/20221029162829/https://help.ubuntu.com/community/ReportingBugs#A4._Collect_information_about_the_bug "ReportingBugs - Community Help Wiki | help.ubuntu.com"
[4]: https://web.archive.org/web/20221029150025/https://support.starlabs.systems/kb/guides/disable-program-problem-reports "Disable program problem reports - Star Labs | support.starlabs.systems"
children:
-
name: Remove `apport` package
recommend: strict
docs: |-
The `apport` package is responsible for automatically generating crash reports for debugging [1].
Apport software is provided using multiple packages such as `apport`, `python3-apport`,
`apport-gtk`, `apport-kde`, among others [1].
This script removes the main `apport` package that would lead other dependencies to be
in orphaned states that can be auto-removed. It does not attempt to remove all packages in
the suite as these can cause side effects and unintended crashes, such as deleting `python3-apport`
may crash interactive `python3` completely [2]. Uninstallation of all other packages
is not yet supported [3].
See also ["source code of apport | launchpad.net"](https://web.archive.org/web/20221029222108/https://code.launchpad.net/ubuntu/+source/apport).
[1]: https://web.archive.org/web/20221030194324/https://packages.ubuntu.com/bionic/apport "Ubuntu - Details of package apport in bionic | packages.ubuntu.com"
[2]: https://web.archive.org/web/20221029162934/https://bugs.launchpad.net/ubuntu/+source/xorg/+bug/1773087 "Bug #1773087 “Remove python3-apport as dependency of xserver-xor...” : Bugs : xorg package : Ubuntu | bugs.launchpad.net"
[3]: https://web.archive.org/web/20221029162946/https://bugs.launchpad.net/apport/+bug/1910304 "Issue showing that uninstallation support is undecided | Bug #1910304 “Add non-invasive option to disable python3-apport ...” : Bugs : Apport | bugs.launchpad.net"
call:
function: UninstallAptPackage
parameters:
packageName: apport
-
name: Disable Apport service
recommend: standard
docs: |-
The Apport service can be stopped using the following command: `systemctl stop apport` [1] [2].
Stopping the service can mitigate the risk of Ubuntu not respecting the opt-out configuration.
This has happened before in different Ubuntu versions, as reported by the community [2].
This script is used as part of a post-installation script by the National Cyber Security Centre in the UK [1].
[1]: https://web.archive.org/web/20221029163021/https://wiki.ubuntuusers.de/Apport/#Benutzung "Apport Wiki ubuntuusers.de | wiki.ubuntuusers.de"
[2]: https://web.archive.org/web/20221029163036/https://askubuntu.com/questions/93457/how-do-i-enable-or-disable-apport/93467 "How do I enable or disable Apport? - Ask Ubuntu | askubuntu.com"
[3]: https://web.archive.org/web/20221029163054/https://www.ncsc.gov.uk/files/ubuntu1804_post_install.sh_.txt "ubuntu1804_post_install.sh_.txt | nscs.gov.uk"
call:
function: DisableSystemdService
parameters:
serviceName: apport
-
name: Disable participation in Apport error messaging system
recommend: standard
docs: |-
Opting out of Apport prevents it from creating crash files after a crash [1].
It can be disabled by setting `enabled=0` in `/etc/default/apport` [1] [2].
This setting comes enabled by default in a clean installation of Ubuntu and
some of its derivatives (such as Pop!_OS).
This script is used as part of a post-installation script by the National Cyber Security Centre in the UK [1].
[1]: https://web.archive.org/web/20221029163213/https://help.ubuntu.com/community/ReportingBugs?action=recall&rev=321#Reporting_a_crash_when_no_message_shows_up_and_crash_files_not_created "ReportingBugs - Community Help Wiki | help.ubuntu.com"
[2]: https://web.archive.org/web/20221029163228/https://bugs.launchpad.net/ubuntu/+source/xorg/+bug/1773087/comments/1 "Comment #1 : Bug #1773087 : Bugs : xorg package : Ubuntu | help.ubuntu.com"
[3]: https://web.archive.org/web/20221029163054/https://www.ncsc.gov.uk/files/ubuntu1804_post_install.sh_.txt "ubuntu1804_post_install.sh_.txt | nscs.gov.uk"
code: |-
if [ -f /etc/default/apport ]; then
sudo sed -i 's/enabled=1/enabled=0/g' /etc/default/apport
echo 'Successfully disabled apport.'
else
echo 'Skipping, apport is not configured to be enabled.'
fi
revertCode: |-
if [ -f /etc/default/apport ]; then
sudo sed -i 's/enabled=0/enabled=1/g' /etc/default/apport
echo 'Successfully enabled apport.'
else
echo 'Skipping, apport is not configured to be disabled.'
fi
-
category: Disable uploading errors (Whoopsie)
docs: |-
The software responsible for uploading crash reports is called Whoopsie [1].
It's always running on Ubuntu systems, watching the `/var/crash` directory for crash reports
(that usually Apport creates) to send over the internet to Canonical servers at `http://daisy.ubuntu.com`
for further processing [1]. Along with the crash report, it sends a unique identifier (GUID)
for your computer [1] in `/etc/default/whoopsie` [2].
Apport only uploads data if package `whoopsie` is installed; otherwise it appears
to be uploading but does not upload [3].
See also:
- [Whoopsie source code | launchpad.net](https://web.archive.org/web/20221029222205/https://code.launchpad.net/ubuntu/+source/whoopsie)
- [oops (back-end for Whoopsie) source code | launchpad.net](https://web.archive.org/web/20221029222222/https://code.launchpad.net/oops-repository)
- [Data gathered from errors | errors.ubuntu.com](https://web.archive.org/web/20221029221957/https://errors.ubuntu.com/)
[1]: https://web.archive.org/web/20221029162649/https://wiki.ubuntu.com/ErrorTracker#Anatomy_of_a_crash "ErrorTracker - Ubuntu Wiki | wiki.ubuntu.com"
[2]: https://web.archive.org/web/20221029163347/https://wiki.ubuntu.com/ErrorTracker/ServerArchitecture "ErrorTracker/ServerArchitecture - Ubuntu Wiki | wiki.ubuntu.com"
[3]: https://web.archive.org/web/20221029162829/https://help.ubuntu.com/community/ReportingBugs#A4._Collect_information_about_the_bug "ReportingBugs - Community Help Wiki | help.ubuntu.com"
children:
-
name: Remove `whoopsie` package
docs: |-
This script uninstalls the `whoopsie` package.
This package is used for error tracker submission in Ubuntu [1].
[1]: https://web.archive.org/web/20221029163609/https://packages.ubuntu.com/bionic/utils/whoopsie "Ubuntu Details of package whoopsie in bionic | package.ubuntu.com"
call:
function: UninstallAptPackage
parameters:
packageName: whoopsie
-
name: Disable Whoopsie service
recommend: standard
docs: |-
Whoopsie works through a service file created in `/lib/systemd/system/whoopsie.service` [1].
This script disables this service to immobilize the main functionality of Whoopsie.
This script is used as part of a post-installation script by the National Cyber Security Centre in the UK [2].
[1]: https://web.archive.org/web/20221029163615/https://packages.ubuntu.com/focal/all/whoopsie/filelist "Ubuntu File list of package whoopsie/focal/all | packages.ubuntu.com"
[2]: https://web.archive.org/web/20221029163054/https://www.ncsc.gov.uk/files/ubuntu1804_post_install.sh_.txt "ubuntu1804_post_install.sh_.txt | nscs.gov.uk"
call:
function: DisableSystemdService
parameters:
serviceName: whoopsie
-
name: Disable crash report submissions
recommend: standard
docs: |-
Once opted-out Whoopsie disables the related service [1].
This script is used as part of a post-installation script by the National Cyber Security Centre in the UK [2].
[1]: https://web.archive.org/web/20221029163651/https://bugs.launchpad.net/ubuntu/+source/whoopsie/+bug/1390014 "Bug #1390014 “systemd is in degraded state if whoopsie is disabl...” : Bugs : whoopsie package : Ubuntu | bugs.launchpad.net"
[2]: https://web.archive.org/web/20221029163054/https://www.ncsc.gov.uk/files/ubuntu1804_post_install.sh_.txt "ubuntu1804_post_install.sh_.txt | nscs.gov.uk"
code: |-
if [ -f /etc/default/whoopsie ] ; then
sudo sed -i 's/report_crashes=true/report_crashes=false/' /etc/default/whoopsie
fi
revertCode: |-
if [ -f /etc/default/whoopsie ] ; then
sudo sed -i 's/report_crashes=false/report_crashes=true/' /etc/default/whoopsie
fi
-
category: Disable Zeitgeist activity logging
docs: |-
Zeitgeist logs files opened, websites visited, conversations, and emails and provides
this information over an API to applications [1].
It serves as a comprehensive activity log and also makes it possible to determine
relationships between items based on usage patterns [1].
It stores computer use actions such as files accessed, sites visited, and conversations held.
The data is typically used to facilitate searches and "best-fit" to your local query only.
There's no proof that it's uploading data.
It does **not** send data over the network but still makes the system more vulnerable by storing
usage information that can be used for further exploitation.
It is primarily used by desktop environments such as GNOME [2], Pantheon [3], and Unity [4].
Furthermore, it is supported by applications (typically as optional functionality) such as
Gnome Rhythmbox (as a plugin) [5], catfish (optional support) [6], and synapse [7].
Read more about Zeitgeist:
- [Official website | zeitgeist.freedesktop.org](https://web.archive.org/web/20221029222739/https://zeitgeist.freedesktop.org/)
- [Wikipedia article | en.wikipedia.org](https://web.archive.org/web/20221029222921/https://en.wikipedia.org/wiki/Zeitgeist_%28free_software%29)
- [Launchpad project page | launchpad.net](https://web.archive.org/web/20221029223026/https://launchpad.net/zeitgeist/)
- [ArchWiki article | wiki.archlinux.org](https://web.archive.org/web/20221029223033/https://wiki.archlinux.org/title/Zeitgeist)
[1]: https://web.archive.org/web/20221029163704/https://packages.debian.org/en/sid/libdevel/libzeitgeist-2.0-dev "libzeitgeist-2.0-dev | Debian Packages | packages.debian.org"
[2]: https://web.archive.org/web/20221029163817/https://gitlab.gnome.org/crvi/gnome-activity-journal "crvi / GNOME Activity Journal · GitLab | gitlab.gnome.org"
[3]: https://web.archive.org/web/20221029163813/https://github.com/elementary/files/blob/70f43e398f989ebbd8b7f2bb3e32c708f8fbdb3b/src/ZeitgeistManager.vala "files/ZeitgeistManager.vala at 70f43e398f989ebbd8b7f2bb3e32c708f8fbdb3b · elementary/files · GitHub | Pantheon Source Code | github.com"
[4]: https://web.archive.org/web/20221029164229/https://bugs.launchpad.net/unity/+bug/717338 "Bug #717338 “No items in Files and Folders place” : Bugs : Unity | bugs.launchpad.net"
[5]: https://web.archive.org/web/20221029164237/https://packages.ubuntu.com/focal/gnome/rhythmbox-plugin-zeitgeist "Ubuntu Details of package rhythmbox-plugin-zeitgeist in focal | packages.ubuntu.com"
[6]: https://web.archive.org/web/20221029164402/https://docs.xfce.org/apps/catfish/introduction "apps:catfish:introduction [Xfce Docs] | docs.xfce.org"
[7]: https://web.archive.org/web/20221029164405/https://launchpad.net/synapse-project "Synapse in Launchpad | launchpad.net"
children:
-
name: Kill Zeitgeist daemon process
docs: |-
`zeitgeist-daemon` is a daemon providing an activity log [1]. Activity logs consist of a central
database for events such as file usage, browser history, and calendar entries [1].
This script stops a currently running Zeitgeist instance, letting Zeitgeist finish any operation
it may currently be doing [1].
The Zeigeist daemon receives metadata from data sources and provides it to applications using D-Bus [2].
The datahub provides passive plugins which insert events into Zeitgeist [2].
[1]: https://web.archive.org/web/20221029164529/https://www.commandlinux.com/man-page/man1/zeitgeist-daemon.1.html "zeitgeist-daemon linux command man page | commandlinux.com"
[2]: https://web.archive.org/web/20221029164539/https://wiki.archlinux.org/title/Zeitgeist "Zeitgeist - ArchWiki | wiki.archlinux.org"
call:
function: RunIfCommandExists
parameters:
command: zeitgeist-daemon
# According to manpage:
# > Stop a currently running Zeitgeist instance and exit. This lets Zeitgeist finish any operation it
# > may currently be doing.
code: zeitgeist-daemon --quit
# According to manpage:
# > Replace any existing Zeitgeist instance if there is one already running. If this option isn't
# > used, zeitgeist-daemon will refuse to start if another running instance is found.
revertCode: zeitgeist-daemon --replace
-
name: Remove Zeitgeist startup entry
docs: |-
This script removes the Autostart entry that is used by the Zeitgeist package to start itself [1].
[The XDG Autostart specification](https://web.archive.org/web/20221029223114/https://specifications.freedesktop.org/autostart-spec/autostart-spec-latest.html)
defines a method for autostarting ordinary desktop entries on desktop environment startup [2].
It is executed by desktop environments such as GNOME [3] and KDE [4].
[1]: https://web.archive.org/web/20221029164654/https://www.apt-browse.org/browse/ubuntu/xenial/main/amd64/zeitgeist-datahub/0.9.16-0ubuntu4/file/etc/xdg/autostart/zeitgeist-datahub.desktop "/etc/xdg/autostart/zeitgeist-datahub.desktop | Zeitgeist package source code | apt-browse.org"
[2]: https://web.archive.org/web/20221029164713/https://wiki.archlinux.org/title/XDG_Autostart "XDG Autostart - ArchWiki | wiki.archlinux.org"
[3]: https://web.archive.org/web/20221030195216/https://help.gnome.org/admin/system-admin-guide/stable/autostart-applications.html.en "Add an autostart application for all users | help.gnome.org"
[4]: https://web.archive.org/web/20221029164803/https://bugs.kde.org/show_bug.cgi?id=433538 "KDE bug report confirming autostart behavior | bugs.kde.org"
call:
function: RenameFile
parameters:
path: /etc/xdg/autostart/zeitgeist-datahub.desktop
-
name: Disable access to Zeitgeist database
docs: |-
Zeitgeist logs its data in the `activity.sqlite` file at `$HOME/.local/share/zeitgeist/activity.sqlite` [1].
This script tells the operating system to remove read and write rights on this file to make it immutable and inaccessible to both reads and writes.
It prevents Zeitgeist from updating its database.
This method has been used successfully by the community [2] [3].
[1]: https://web.archive.org/web/20221029164814/https://forensicswiki.xyz/wiki/index.php?title=Zeitgeist "Zeitgeist - Forensics Wiki | forensicswiki.xyz"
[2]: https://web.archive.org/web/20221029164958/https://askubuntu.com/questions/994827/why-is-zeitgeist-daemon-still-in-exitstance-how-to-remove-the-database/994837 "apt - Why is zeitgeist daemon still in exitstance? How to remove the database - Ask Ubuntu | askubuntu.com"
[3]: https://web.archive.org/web/20221029165309/https://linuxaria.com/howto/how-to-remove-zeitgeist-in-ubuntu-and-why "How to remove Zeitgeist in Ubuntu and why | Linuxaria | linuxaria.com"
code: |-
file="$HOME/.local/share/zeitgeist/activity.sqlite"
if [ -f "$file" ]; then
chmod -rw "$file"
echo "Successfully disabled read/write access to $file."
else
echo "Skipping, no action needed, file does not exist at $file."
fi
revertCode: |-
file="$HOME/.local/share/zeitgeist/activity.sqlite"
if [ -f "$file" ]; then
chmod +rw "$file"
echo "Successfully restored read/write access to $file."
else
>&2 echo "Failed to restore access, file does not exist at $file."
fi
-
name: Remove Zeitgeist package (can break integrated software)
docs: |-
The main functionality for Zeitgeist is provided by the `zeitgeist` package in Fedora [1] and Arch Linux [2],
and the `zeitgeist-core` package in Debian [3].
It was installed by default in Ubuntu 16.x [4] and 18.x [5] as `zeitgeist-core`.
It is known to be installed by default by Arch Linux [6] and Artix Linux [7] too.
Removing this package may break the Unity desktop environment and prevent you from searching for programs
by typing into the box [8].
[1]: https://web.archive.org/web/20221029165307/https://packages.fedoraproject.org/pkgs/zeitgeist/zeitgeist/index.html "zeitgeist - Fedora Packages | packages.fedoraproject.org"
[2]: https://web.archive.org/web/20221029165603/https://archlinux.org/packages/extra/x86_64/zeitgeist/ "Arch Linux - zeitgeist 1.0.4-1 (x86_64) | archlinux.org"
[3]: https://web.archive.org/web/20221029165609/https://packages.debian.org/search?keywords=zeitgeist-core "Debian -- Package Search Results -- zeitgeist-core | packages.debian.org"
[4]: https://web.archive.org/web/20221029165714/https://releases.ubuntu.com/xenial/ubuntu-16.04.6-desktop-i386.manifest "List of sofware packags shipped with Ubuntu 16.04.6 | releases.ubuntu.com"
[5]: https://web.archive.org/web/20221029165726/https://releases.ubuntu.com/18.04/ubuntu-18.04.6-desktop-amd64.manifest "List of sofware packags shipped with Ubuntu 18.04.6 | releases.ubuntu.com"
[6]: https://web.archive.org/web/20221029165821/https://bugs.archlinux.org/task/52326 "FS#52326 : [midori-gtk2] Please remove the zeitgeist dependency! | archlinux.org"
[7]: https://web.archive.org/web/20221029165914/https://forum.artixlinux.org/index.php/topic,1432.0.html "Remove Unmaintained Zeitgeist (Spyware/Telemetry) from Default MATE installation | artixlinux.org"
[8]: https://web.archive.org/web/20221029165902/https://askubuntu.com/questions/45548/disabling-zeitgeist/57487 "Disabling Zeitgeist - Ask Ubuntu | askubuntu.com"
call:
-
function: UninstallAptPackage
parameters:
packageName: zeitgeist-core
# Other related packages include (apt list *zeitgeist*):
# zeitgeist-core, zeitgeist-datahub, python3-zeitgeist among many others.
# Packages that use it include e.g. activity-log-manager, activity-log-manager-control-center..
-
function: UninstallPacmanPackage
parameters:
packageName: zeitgeist
-
function: UninstallRPMPackage
parameters:
packageName: zeitgeist
-
name: Disable connectivity checks (breaks Captive Portal detection)
docs: |-
[NetworkManager](https://web.archive.org/web/20221029223230/https://developer-old.gnome.org/NetworkManager/stable/NetworkManager.conf.html) can try
to reach a web server after connecting to a network in order to determine if it is, e.g., behind a captive portal [1].
Disabling connectivity protects against privacy leaks [1], but breaks captive portal detection.
Connectivity URLs differ depending on the Linux distribution, e.g.:
- Arch Linux: `http://ping.archlinux.org/nm-check.txt` (in `/usr/lib/NetworkManager/conf.d/20-connectivity.conf`) [1].
- Ubuntu: `http://connectivity-check.ubuntu.com` [2] (in `/usr/lib/NetworkManager/conf.d/20-connectivity-ubuntu.conf` [3]).
- Pop!_OS: `http://204.pop-os.org/` in `20-connectivity-pop.conf` [4].
- Fedora: `http://fedoraproject.org/static/hotspot.txt` [5] in `/usr/lib/NetworkManager/conf.d/20-connectivity-fedora.conf` [6].
- …
This script disables connectivity checks by adding a global rule that will override Linux distribution-specific configuration.
This is the recommended way to disable connectivity checks [1].
[1]: https://web.archive.org/web/20221029165948/https://wiki.archlinux.org/title/NetworkManager "NetworkManager - ArchWiki | wiki.archlinux.org"
[2]: https://web.archive.org/web/20221029170031/https://launchpad.net/ubuntu/jammy/+package/network-manager-config-connectivity-ubuntu "network-manager-config-connectivity-ubuntu : Jammy (22.04) : Ubuntu | launchpad.net/ubuntu"
[3]: https://web.archive.org/web/20221029170026/https://packages.ubuntu.com/bionic/all/network-manager-config-connectivity-ubuntu/filelist "Ubuntu - File list of package network-manager-config-connectivity-ubuntu/bionic/all | packages.ubuntu.com"
[4]: https://web.archive.org/web/20221029170108/https://github.com/pop-os/connectivity/blob/master/debian/20-connectivity-pop.conf "connectivity/20-connectivity-pop.conf at master · pop-os/connectivity | github.com"
[5]: https://web.archive.org/web/20221029170202/https://cgit.freedesktop.org/NetworkManager/NetworkManager/tree/contrib/fedora/rpm/20-connectivity-fedora.conf "20-connectivity-fedora.conf\rpm\fedora\contrib - NetworkManager/NetworkManager - Network connection manager and user applications | reedesktop.org"
[6]: https://web.archive.org/web/20221029170207/https://fedora.pkgs.org/35/fedora-updates-testing-x86_64/NetworkManager-config-connectivity-fedora-1.32.12-1.fc35.noarch.rpm.html "NetworkManager-config-connectivity-fedora | fedora.pkgs.org"
call:
function: RunIfCommandExists
parameters:
command: /usr/sbin/NetworkManager
code: |-
file='/etc/NetworkManager/conf.d/20-disable-connectivity-privacy-sexy.conf'
content=$'# Created by privacy.sexy\n[connectivity]\nenabled=false'
directory="${file%/*}"
mkdir -p "$directory"
if [ -f "$file" ]; then
echo "Skipping, connectivity checks are already disabled through $file."
else
echo -n "$content" | sudo tee "$file" > /dev/null
echo 'Successfully disabled connectivity checks.'
fi
if command -v 'nmcli' &> /dev/null; then
sudo nmcli general reload
echo 'Successfully reloaded configuration.'
else
echo 'It will take effect after reboot.'
fi
revertCode: |-
if [ ! -f "$file" ]; then
echo 'Skipping, connectivity checks are not disabled.'
else
sudo rm -fv "$file"
echo 'Successfully restored connectivity checks.'
fi
if command -v 'nmcli' &> /dev/null; then
sudo nmcli general reload
echo 'Successfully reloaded configuration.'
else
echo 'It will take effect after reboot.'
fi
-
category: Configure programs
docs: |-
These scripts configure third-party applications installed on Linux distributions to harden their
security and privacy to protect your data.
They scripts differ from OS level configurations as they configure applications that are not typically
native to Linux distributions, i.e., not included in the OS itself and are not known as being part of
a specific distribution.
children:
-
name: Disable Python history for future interactive commands
docs: |-
Python is a high-level, general-purpose programming language [1].
Most Python implementations (including CPython) include a [read-eval-print loop (REPL)](https://web.archive.org/web/20221029223210/https://en.wikipedia.org/wiki/Read%E2%80%93eval%E2%80%93print_loop),
permitting them to function as a command-line interpreter for which users enter statements sequentially and receive results immediately [1].
Python saves interactive commands in the `~/.python_history` file [2] [3].
This script ensures that this file is immutable by changing the file attributes [4], so Python can no
longer update the file.
[1]: https://web.archive.org/web/20221029170256/https://en.wikipedia.org/wiki/Python_%28programming_language%29 "Python (programming language) - Wikipedia | wikipedia.org"
[2]: https://web.archive.org/web/20221029170303/https://github.com/python/cpython/blob/b2499669ef2e6dc9a2cdb49b4dc498e078167e26/Lib/site.py#L430-L451 "cpython/site.py at b2499669ef2e6dc9a2cdb49b4dc498e078167e26 · python/cpython · Source code that registers it | github.com"
[3]: https://web.archive.org/web/20221029170501/https://bugs.python.org/issue20886 "Issue 20886: Disabling logging to ~/.python_history is not simple enough | Python tracker | bugs.python.org"
[4]: https://web.archive.org/web/20221029170511/https://man7.org/linux/man-pages/man1/chattr.1.html "Chattr manpage | chattr - Linux manual page | man7.org"
code: |-
history_file="$HOME/.python_history"
if [ ! -f "$history_file" ]; then
touch "$history_file"
echo "Created $history_file."
fi
sudo chattr +i "$(realpath $history_file)" # realpath in case of symlink
revertCode: |-
history_file="$HOME/.python_history"
if [ ! -f "$history_file" ]; then
echo "Skipping, $history_file does not exist."
else
sudo chattr -i "$(realpath $history_file)" # realpath in case of symlink
fi
-
category: Disable Visual Studio Code data collection
docs: |-
Visual Studio Code, also commonly referred to as VS Code, is a source-code editor made by Microsoft [1].
Visual Studio Code makes outgoing network requests to collect data in the background without users invoking
a feature that requires online access [2]. The requests include, but are not limited to, automatic extension
update checks, querying settings for A/B experiments, and fetching online data for auto-completion [2].
In addition, Visual Studio Code collects and transmits telemetry data to Microsoft servers, such as [3]:
- Diagnostic information about your system and usage is sent to Microsoft servers [3].
- Your usage data and data about feature performance [3].
[1]: https://web.archive.org/web/20221029170818/https://en.wikipedia.org/wiki/Visual_Studio_Code "Visual Studio Code - Wikipedia | en.wikipedia.org"
[2]: https://web.archive.org/web/20221029170840/https://code.visualstudio.com/updates/v1_26#_offline-mode "Visual Studio Code July 2018 | code.visualstudio.com"
[3]: https://web.archive.org/web/20221029171138/https://code.visualstudio.com/docs/getstarted/telemetry "Visual Studio Code Telemetry | code.visualstudio.com"
children:
-
name: Disable Visual Studio Code telemetry
recommend: standard
docs: |-
The `telemetry.telemetryLevel` preference can be adjusted as follows [1]:
- `default` (on): Transmits usage data, errors, and crash reports.
- `error`: Transmits general error telemetry and crash reports.
- `crash`: Transmits OS-level crash reports.
- `off`: Disables all product telemetry.
This script disables telemetry data, which includes usage data, errors, and crash reports.
The `telemetry.enableTelemetry` was the primary option to disable telemetry collection [2].
This disabled the collection of diagnostic data [3].
However, it has been deprecated and replaced by the `telemetry.telemetryLevel` setting [4] [5].
Crash reports use a unique ID to identify you [6]. They were initially controlled using the
`telemetry.enableCrashReporter` setting [7], but this setting has been deprecated and replaced by
the `telemetry.telemetryLevel` setting [7].
[1]: https://web.archive.org/web/20221029171158/https://github.com/microsoft/vscode/blob/d32b92bd7a49ce8667b954d86320cc29545fc505/src/vs/platform/telemetry/common/telemetryService.ts#L278-L294 "vscode/telemetryService.ts at d32b92bd7a49ce8667b954d86320cc29545fc505 · microsoft/vscode · GitHub | github.com"
[2]: https://web.archive.org/web/20221029171236/https://github.com/microsoft/vscode/issues/3182 "Telemetry opt-out · Issue #3182 · microsoft/vscode · GitHub | github.com"
[3]: https://web.archive.org/web/20221029171302/https://github.com/microsoft/vscode/blob/9f2d55f21247224e00e438ff0e8a080c557356dc/src/vs/platform/telemetry/common/telemetryService.ts#L247-L265 "vscode/telemetryService.ts at 9f2d55f21247224e00e438ff0e8a080c557356dc · microsoft/vscode · GitHub | github.com"
[4]: https://web.archive.org/web/20221029171313/https://github.com/microsoft/vscode/issues/132552 "Explore splitting the telemetry settings into error telemetry + all other telemetry · Issue #132552 · microsoft/vscode · GitHub | github.com"
[5]: https://web.archive.org/web/20221029171158/https://github.com/microsoft/vscode/blob/d32b92bd7a49ce8667b954d86320cc29545fc505/src/vs/platform/telemetry/common/telemetryService.ts#L302-L314 "vscode/telemetryService.ts at d32b92bd7a49ce8667b954d86320cc29545fc505 · microsoft/vscode · GitHub | github.com"
[6]: https://web.archive.org/web/20221029171339/https://github.com/microsoft/vscode/blob/1dd67592e120d916a8963903babaf0fae74440c5/src/vs/code/electron-main/app.ts#L1259 "vscode/app.ts at 1dd67592e120d916a8963903babaf0fae74440c5 · microsoft/vscode · GitHub | github.com"
[7]: https://web.archive.org/web/20221029171353/https://github.com/microsoft/vscode/blob/17fc955b4ffb1f9a0097a561291aaa5c8918eee6/src/vs/workbench/electron-sandbox/desktop.contribution.ts#L253-L267 "vscode/desktop.contribution.ts at 17fc955b4ffb1f9a0097a561291aaa5c8918eee6 · microsoft/vscode · GitHub | github.com"
call:
-
function: SetVsCodeSetting
parameters:
setting: telemetry.telemetryLevel
jsonValue: >-
"off"
-
function: SetVsCodeSetting
parameters:
setting: telemetry.enableTelemetry
jsonValue: >-
false
-
function: SetVsCodeSetting
parameters:
setting: telemetry.enableCrashReporter
jsonValue: >-
false
-
name: Disable online experiments by Microsoft in Visual Studio Code
recommend: standard
docs: |-
VS Code employs experiments to test new features or gradually roll them out [1].
The experimentation framework communicates with Microsoft servers [1].
This setting is enabled by default [1].
This script disables fetching experiments from a Microsoft online service [1].
It accomplishes this by setting `workbench.enableExperiments` to `false` [1].
[1]: https://web.archive.org/web/20221029171424/https://github.com/microsoft/vscode-docs/blob/d2dbfc5bcad0be08afca69e9253c1d5541e19d31/docs/supporting/faq.md "vscode-docs/faq.md at d2dbfc5bcad0be08afca69e9253c1d5541e19d31 · microsoft/vscode-docs · GitHub"
[2]: https://web.archive.org/web/20221029171439/https://github.com/microsoft/vscode/blob/b784e0514d4608cc20a0e7ce62baf7bc8131158c/src/vs/workbench/contrib/experiments/browser/experiments.contribution.ts#L25-L34 "vscode/experiments.contribution.ts at b784e0514d4608cc20a0e7ce62baf7bc8131158c · microsoft/vscode · GitHub"
call:
function: SetVsCodeSetting
parameters:
setting: workbench.enableExperiments
jsonValue: >-
false
-
name: Disable Visual Studio Code automatic updates in favor of manual updates
docs: |-
By default, VS Code is configured to automatically update when new versions are released [1].
Automatic updates reduce your control over privacy by sending data to Microsoft servers.
On Linux, updates are often handled by the system package manager, rendering this
setting redundant [1].
To opt out of auto-updates, the Update: Mode (`update.mode`) setting is changed from default
to none [1]. `update.mode` has replaced the older `update.channel` setting [2] [3].
[1]: https://web.archive.org/web/20221029171537/https://github.com/microsoft/vscode-docs/blob/9a900b380e11530376104ffc83a004b82553728e/docs/supporting/faq.md#how-do-i-opt-out-of-vs-code-auto-updates "vscode-docs/faq.md at 9a900b380e11530376104ffc83a004b82553728e · microsoft/vscode-docs · GitHub | github.com"
[2]: https://web.archive.org/web/20221029171549/https://github.com/microsoft/vscode/blob/8e2ec5a7ee1ae5500c645c05145359f2a814611c/src/vs/platform/update/common/update.config.contribution.ts#L36-L42 "vscode/update.config.contribution.ts at 8e2ec5a7ee1ae5500c645c05145359f2a814611c · microsoft/vscode · GitHub | github.com"
[3]: https://web.archive.org/web/20221029171607/https://github.com/microsoft/vscode/issues/70084 'VS Code 1.31.1 does not respect "update.channel": "none" · Issue #70084 · microsoft/vscode · GitHub | github.com'
call:
-
function: SetVsCodeSetting
parameters:
setting: update.mode
jsonValue: >-
"none"
-
function: SetVsCodeSetting
parameters:
setting: update.channel
jsonValue: >-
"none"
-
name: Disable fetching release notes from Microsoft servers after an update
docs: |-
This script prevents Visual Studio Code from displaying release notes after an update [1].
Release notes are fetched from a Microsoft online service [1] and thus expose data about you,
such as your IP address, to Microsoft.
It is enabled by default [1] and can be disabled by setting `update.showReleaseNotes` to `false` [1].
[1]: https://web.archive.org/web/20221029171549/https://github.com/microsoft/vscode/blob/8e2ec5a7ee1ae5500c645c05145359f2a814611c/src/vs/platform/update/common/update.config.contribution.ts#L51-L57 "vscode/update.config.contribution.ts at 8e2ec5a7ee1ae5500c645c05145359f2a814611c · microsoft/vscode | github.com"
call:
function: SetVsCodeSetting
parameters:
setting: update.showReleaseNotes
jsonValue: >-
false
-
category: Configure auto-update settings for Visual Studio Code extensions
docs: |-
These scripts control the automatic update behavior of extensions.
Updates are fetched from Microsoft servers [1] [2].
Use of online Microsoft services can disclose information about you and your behavior.
[1]: https://web.archive.org/web/20221029171704/https://github.com/microsoft/vscode/blob/b784e0514d4608cc20a0e7ce62baf7bc8131158c/src/vs/workbench/contrib/extensions/browser/extensions.contribution.ts#L135-L150 "vscode/extensions.contribution.ts at b784e0514d4608cc20a0e7ce62baf7bc8131158c · microsoft/vscode · GitHub | github.com"
[2]: https://web.archive.org/web/20221029171719/https://github.com/microsoft/vscode-docs/blob/9a900b380e11530376104ffc83a004b82553728e/docs/editor/extension-marketplace.md#extension-auto-update "vscode-docs/extension-marketplace.md at 9a900b380e11530376104ffc83a004b82553728e · microsoft/vscode-docs · GitHub | github.com"
children:
-
name: Disable automatic Visual Studio Code extension updates
docs: |-
By default, Visual Studio Code automatically downloads and installs updates for all
extensions [1]. These updates are fetched from a Microsoft online service [1].
This script disables the automatic updating of installed extensions.
It accomplishes this by setting `extensions.autoUpdate` to `false` [2].
[1]: https://web.archive.org/web/20221029171704/https://github.com/microsoft/vscode/blob/b784e0514d4608cc20a0e7ce62baf7bc8131158c/src/vs/workbench/contrib/extensions/browser/extensions.contribution.ts#L135-L150 "vscode/extensions.contribution.ts at b784e0514d4608cc20a0e7ce62baf7bc8131158c · microsoft/vscode · GitHub | github.com"
[2]: https://web.archive.org/web/20221029171719/https://github.com/microsoft/vscode-docs/blob/9a900b380e11530376104ffc83a004b82553728e/docs/editor/extension-marketplace.md#extension-auto-update "vscode-docs/extension-marketplace.md at 9a900b380e11530376104ffc83a004b82553728e · microsoft/vscode-docs · GitHub | github.com"
call:
function: SetVsCodeSetting
parameters:
setting: extensions.autoUpdate
jsonValue: >-
false
-
name: Disable Visual Studio Code automatic extension update checks
docs: |-
By default, Visual Studio Code automatically checks extensions for updates [1].
If an update for an extension is available, it is marked as outdated in the Extensions view [1].
These updates are fetched from a Microsoft online service [1].
This script disables the automatic checking of updates for extensions.
It achieves this by setting `extensions.autoCheckUpdates` to `false` [2].
[1]: https://web.archive.org/web/20221029171704/https://github.com/microsoft/vscode/blob/b784e0514d4608cc20a0e7ce62baf7bc8131158c/src/vs/workbench/contrib/extensions/browser/extensions.contribution.ts#L152-L158 "vscode/extensions.contribution.ts at b784e0514d4608cc20a0e7ce62baf7bc8131158c · microsoft/vscode | github.com"
[2]: https://web.archive.org/web/20221029171719/https://github.com/microsoft/vscode-docs/blob/9a900b380e11530376104ffc83a004b82553728e/docs/editor/extension-marketplace.md#extension-auto-update "vscode-docs/extension-marketplace.md at 9a900b380e11530376104ffc83a004b82553728e · microsoft/vscode-docs · GitHub | github.com"
call:
function: SetVsCodeSetting
parameters:
setting: extensions.autoCheckUpdates
jsonValue: >-
false
-
name: Disable automatic fetching of Microsoft recommendations in Visual Studio Code
recommend: strict
docs: |-
Visual Studio Code, by default, fetches recommendations from online Microsoft servers [1].
This script modifies that default behavior, making recommendations from Microsoft servers
available only on demand, rather than being fetched automatically [1].
Despite this setting being deprecated [1] [2], it is still respected [3] [4].
[1]: https://web.archive.org/web/20221029171704/https://github.com/microsoft/vscode/blob/b784e0514d4608cc20a0e7ce62baf7bc8131158c/src/vs/workbench/contrib/extensions/browser/extensions.contribution.ts#L164-L169 "vscode/extensions.contribution.ts at b784e0514d4608cc20a0e7ce62baf7bc8131158c · microsoft/vscode · GitHub | github.com"
[2]: https://web.archive.org/web/20221029171802/https://github.com/microsoft/vscode/issues/94416 "Combine extensions.ignoreRecommendations and extensions.showRecommendationsOnlyOnDemand · Issue #94416 · microsoft/vscode · GitHub | github.com"
[3]: https://web.archive.org/web/20221029171840/https://github.com/microsoft/vscode/blob/df0a8572e5e97ba71160c736addf171c671bb9e9/src/vs/workbench/contrib/extensions/browser/extensionsViewlet.ts#L221-L234 "vscode/extensionsViewlet.ts at df0a8572e5e97ba71160c736addf171c671bb9e9 · microsoft/vscode · GitHub | github.com"
[4]: https://web.archive.org/web/20221029171850/https://github.com/microsoft/vscode/blob/1f86576cb95925e79d92c8af04424680bb144945/src/vs/workbench/contrib/extensions/browser/extensionRecommendationNotificationService.ts#L144-L147 "vscode/extensionRecommendationNotificationService.ts at 1f86576cb95925e79d92c8af04424680bb144945 · microsoft/vscode · GitHub | github.com"
call:
function: SetVsCodeSetting
parameters:
setting: extensions.showRecommendationsOnlyOnDemand
jsonValue: >-
true
-
name: Disable automatic fetching of remote repositories in Visual Studio Code
docs: |-
Visual Studio Code (VS Code) periodically fetches changes from remote repositories [1].
This feature lets VS Code display how many changes your local repository is ahead or behind the remote [1].
This script disables the automatic fetching, providing you more control over when you
communicate with remote servers. Note that this feature shares data not with Microsoft,
but with the servers hosting the remote repositories you're working with.
As of VS Code 1.19, this feature is disabled by default [1] [3], although it was enabled by
default in earlier versions [2].
The `git.autofetch` setting controls this feature, with `true` enabling it and
`false` disabling it [2].
[1]: https://web.archive.org/web/20221029171946/https://github.com/microsoft/vscode-docs/blob/9a900b380e11530376104ffc83a004b82553728e/docs/sourcecontrol/overview.md#remotes "vscode-docs/overview.md at main · microsoft/vscode-docs · GitHub | github.com"
[2]: https://web.archive.org/web/20221029172003/https://github.com/Microsoft/vscode/issues/34684 "Set git.autofetch to disabled, by default · Issue #34684 · microsoft/vscode · GitHub | github.com"
[3]: https://web.archive.org/web/20221029172102/https://github.com/microsoft/vscode/blob/9bc43c7f8acc1d3b2d572f75ca30dccc2fed643d/extensions/git/package.json#L1929-L1945 "vscode/package.json at 9bc43c7f8acc1d3b2d572f75ca30dccc2fed643d · microsoft/vscode · GitHub | github.com"
call:
function: SetVsCodeSetting
parameters:
setting: git.autofetch
jsonValue: >-
false
-
name: Disable fetching package information from NPM and Bower in Visual Studio Code
docs: |-
Visual Studio Code fetches data from NPM and Bower to provide autocompletion and hover information
for npm dependencies [1]. By default, this feature is enabled [2] and fetches data from
`https://registry.npmjs.org` and `https://registry.bower.io` [1].
This script prevents the automatic fetching of package information.
You can disable this feature by setting `npm.fetchOnlinePackageInfo` to `false` [2].
[1]: https://web.archive.org/web/20221029172113/https://github.com/microsoft/vscode/blob/21504708043941c1e9e45b7d0892a9a8a03470d7/extensions/npm/package.nls.json#L17 "vscode/package.nls.json at 21504708043941c1e9e45b7d0892a9a8a03470d7 · microsoft/vscode · GitHub | github.com"
[2]: https://web.archive.org/web/20221029172220/https://github.com/microsoft/vscode/blob/29e985eca0713c8458ae8349c1742d6fb75719e4/extensions/npm/package.json#L293-L300 "vscode/package.json at 29e985eca0713c8458ae8349c1742d6fb75719e4 · microsoft/vscode · GitHub | github.com"
call:
function: SetVsCodeSetting
parameters:
setting: npm.fetchOnlinePackageInfo
jsonValue: >-
false
-
name: Disable sending search queries to Microsoft in Visual Studio Code
recommend: strict
docs: |-
By default, Visual Studio Code sends setting search queries to Microsoft servers [1]. This is
part of the natural language search mode, which is powered by a Microsoft online service [1].
You can disable this feature by setting `enableNaturalLanguageSettingsSearch` to `false` [1].
For more information, see [Settings search | Feature announcement](https://web.archive.org/web/20221029223417/https://github.com/microsoft/vscode-docs/blob/8f6d43a3b24d8661f25f93d5e679c3e6ee1191b6/release-notes/v1_20.md#settings-search).
[1]: https://web.archive.org/web/20221029172320/https://github.com/microsoft/vscode/blob/13ba7bb446a638d37ebccb1a7d74e31c32bb9790/src/vs/workbench/contrib/preferences/common/preferencesContribution.ts#L151-L157 "vscode/preferencesContribution.ts at 13ba7bb446a638d37ebccb1a7d74e31c32bb9790 · microsoft/vscode · GitHub | github.com"
call:
function: SetVsCodeSetting
parameters:
setting: workbench.settings.enableNaturalLanguageSearch
jsonValue: >-
false
-
name: Disable Visual Studio Code automatic type acquisition in TypeScript
docs: |-
This script disables [automatic type acquisition](https://web.archive.org/web/20221029223431/https://code.visualstudio.com/docs/nodejs/working-with-javascript#_typings-and-automatic-type-acquisition) [1],
a feature that fetches `@types` packages from npm to improve IntelliSense for external libraries [1].
Although this feature is disabled by default [2], you can ensure it's off by setting
`typescript.disableAutomaticTypeAcquisition` to `false` [2].
[1]: https://web.archive.org/web/20221029172348/https://github.com/microsoft/vscode/blob/3c37a5a8d7768ea068acf578594f9b71cfbe81e1/extensions/typescript-language-features/package.nls.json#L13 "vscode/package.nls.json at 3c37a5a8d7768ea068acf578594f9b71cfbe81e1 · microsoft/vscode · GitHub | github.com"
[2]: https://web.archive.org/web/20221029172429/https://github.com/microsoft/vscode/blob/29e985eca0713c8458ae8349c1742d6fb75719e4/extensions/typescript-language-features/package.json "vscode/package.json at 29e985eca0713c8458ae8349c1742d6fb75719e4 · microsoft/vscode · GitHub | github.com"
call:
function: SetVsCodeSetting
parameters:
setting: typescript.disableAutomaticTypeAcquisition
jsonValue: >-
false
-
name: Disable Visual Studio Code Edit Sessions
docs: |-
**Edit Sessions** is a Visual Studio Code feature that synchronizes uncommitted changes between
VS Code for the Web (e.g., GitHub Codespaces) and the Desktop version, storing data in the
Microsoft Cloud [1].
This script disables **Edit Sessions** and its more granular subsettings like
`workbench.experimental.editSessions.autoStore`, `workbench.editSessions.autoResume`, and
`workbench.editSessions.continueOn` [2].
[1]: https://web.archive.org/web/20221029172502/https://github.com/microsoft/vscode-docs/blob/9a900b380e11530376104ffc83a004b82553728e/release-notes/v1_71.md#bring-your-changes-with-you-when-moving-across-development-environments "vscode-docs/v1_71.md at 9a900b380e11530376104ffc83a004b82553728e · microsoft/vscode-docs · GitHub | github.com"
[2]: https://web.archive.org/web/20221029172519/https://github.com/microsoft/vscode/blob/b891aa212a3644cc345d061c63a67ba51080cace/src/vs/workbench/contrib/editSessions/browser/editSessions.contribution.ts#L816-L877 "vscode/editSessions.contribution.ts at b891aa212a3644cc345d061c63a67ba51080cace · microsoft/vscode | github.com"
call:
-
function: SetVsCodeSetting
parameters:
setting: workbench.experimental.editSessions.enabled
jsonValue: >-
false
-
function: SetVsCodeSetting
parameters:
setting: workbench.experimental.editSessions.autoStore
jsonValue: >-
false
-
function: SetVsCodeSetting
parameters:
setting: workbench.editSessions.autoResume
jsonValue: >-
false
-
function: SetVsCodeSetting
parameters:
setting: workbench.editSessions.continueOn
jsonValue: >-
false
-
category: Disable data sharing for Visual Studio Code "Settings Sync"
docs: |-
**Settings Sync** is a Visual Studio Code feature that synchronizes settings, keybindings,
and installed extensions across different machines [1]. This data is stored in the Microsoft
Cloud [1].
[1]: https://web.archive.org/web/20221029172856/https://github.com/microsoft/vscode-docs/blob/9a900b380e11530376104ffc83a004b82553728e/docs/editor/settings-sync.md "vscode-docs/settings-sync.md at main · microsoft/vscode-docs · GitHub | github.com"
children:
-
name: Disable synchronization of Visual Studio Code keybindings
docs: |-
By default [1], Keyboard Shortcuts are synchronized across platforms [2].
You can disable this by setting `settingsSync.keybindingsPerPlatform` to `false` [1] [2].
[1]: https://web.archive.org/web/20221029172910/https://github.com/microsoft/vscode/blob/095ddabc52b82498ee7f718a34f9dd11d59099a8/src/vs/platform/userDataSync/common/userDataSync.ts#L58-L64 "vscode/userDataSync.ts at 095ddabc52b82498ee7f718a34f9dd11d59099a8 · microsoft/vscode · GitHub | github.com"
[2]: https://web.archive.org/web/20221029172856/https://github.com/microsoft/vscode-docs/blob/9a900b380e11530376104ffc83a004b82553728e/docs/editor/settings-sync.md "vscode-docs/settings-sync.md at main · microsoft/vscode-docs · GitHub | github.com"
call:
function: SetVsCodeSetting
parameters:
setting: settingsSync.keybindingsPerPlatform
jsonValue: >-
false
-
name: Disable synchronization of Visual Studio Code extensions
docs: |-
Visual Studio Code synchronizes all built-in and installed extensions, along with their
global enablement state, by default [1] [2].
This script prevents the synchronization of all Visual Studio Code extensions.
To disable extension synchronization, set `settingsSync.ignoredExtensions` [1],
which configures the list of extensions to be ignored during synchronization [2].
[1]: https://web.archive.org/web/20221029172856/https://github.com/microsoft/vscode-docs/blob/9a900b380e11530376104ffc83a004b82553728e/docs/editor/settings-sync.md "vscode-docs/settings-sync.md at main · microsoft/vscode-docs · GitHub | github.com"
[2]: https://web.archive.org/web/20221029172910/https://github.com/microsoft/vscode/blob/095ddabc52b82498ee7f718a34f9dd11d59099a8/src/vs/platform/userDataSync/common/userDataSync.ts#L65-L78 "vscode/userDataSync.ts at 095ddabc52b82498ee7f718a34f9dd11d59099a8 · microsoft/vscode · GitHub | github.com"
call:
function: SetVsCodeSetting
parameters:
setting: settingsSync.ignoredExtensions
jsonValue: >-
["*"]
-
name: Disable synchronization of Visual Studio Code settings
docs: |-
By default, Visual Studio Code synchronizes all settings, except for machine settings
(those with machine or machine-overridable scopes), as these are specific to a given machine [1] [2].
This script disables the synchronization of all settings.
You can specify settings to ignore during synchronization using the `settingsSync.ignoredSettings`
setting [1] [2].
[1]: https://web.archive.org/web/20221029172856/https://github.com/microsoft/vscode-docs/blob/9a900b380e11530376104ffc83a004b82553728e/docs/editor/settings-sync.md "vscode-docs/settings-sync.md at main · microsoft/vscode-docs · GitHub | github.com"
[2]: https://web.archive.org/web/20221029172910/https://github.com/microsoft/vscode/blob/095ddabc52b82498ee7f718a34f9dd11d59099a8/src/vs/platform/userDataSync/common/userDataSync.ts#L79-L89 "vscode/userDataSync.ts at 095ddabc52b82498ee7f718a34f9dd11d59099a8 · microsoft/vscode · GitHub | github.com"
call:
function: SetVsCodeSetting
parameters:
setting: settingsSync.ignoredSettings
jsonValue: >-
["*"]
-
name: Disable .NET telemetry
recommend: standard
docs: |-
.NET, previously known as .NET Core [1], is a free, open-source, and cross-platform developer platform
that allows the creation of various types of applications [2].
The .NET Software Development Kit (SDK) includes a telemetry feature, enabled by default [3], that
collects and sends usage data to Microsoft upon the execution of .NET Command-Line Interface (CLI)
commands. This data comprises your operating system, hardware specifics, geographic location,
and .NET usage/installation information [3]. A fraction of this collected data is made publicly
available at [.NET CLI Telemetry Data | dotnet.microsoft.com](https://web.archive.org/web/20221029211429/https://dotnet.microsoft.com/en-us/platform/telemetry).
This script sets the `DOTNET_CLI_TELEMETRY_OPTOUT` environment variable to `1`, opting you out
of the .NET telemetry collection [3]. It is crucial to establish this setting prior to the
.NET installation since the installation process also sends telemetry data [3].
[1]: https://web.archive.org/web/20220930202101/https://en.wikipedia.org/wiki/.NET ".NET - Wikipedia | en.wikipedia.org"
[2]: https://web.archive.org/web/20221003175158/https://dotnet.microsoft.com/en-us/download "Download .NET (Linux, macOS, and Windows) | dotnet.microsoft.com"
[3]: https://web.archive.org/web/20220903043156/https://docs.microsoft.com/en-us/dotnet/core/tools/telemetry ".NET SDK and .NET CLI telemetry - .NET CLI | Microsoft Docs | docs.microsoft.com"
call:
function: PersistSystemEnvironmentVariable
parameters:
variable: DOTNET_CLI_TELEMETRY_OPTOUT
value: '1'
-
name: Disable PowerShell Core telemetry
docs: |-
PowerShell Core, a cross-platform (Windows, Linux, and macOS) automation and configuration
tool/framework, incorporates a command-line shell, a related scripting language, and a
framework for processing cmdlets [1].
It sends telemetry data to Microsoft servers, revealing your software usage,
geolocation, and additional environment data [2].
This script sets the `env:POWERSHELL_TELEMETRY_OPTOUT` environment variable to `1`,
opting you out of PowerShell Core's telemetry collection.
[1]: https://web.archive.org/web/20221011001154/https://github.com/PowerShell/PowerShell "GitHub - PowerShell/PowerShell: PowerShell for every system! | github.com"
[2]: https://web.archive.org/web/20221011165907/https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_telemetry?view=powershell-7.2 "about Telemetry - PowerShell | Microsoft Learn"
call:
function: PersistSystemEnvironmentVariable
parameters:
variable: POWERSHELL_TELEMETRY_OPTOUT
value: '1'
-
category: Configure Firefox
docs: |-
Mozilla Firefox, colloquially known as Firefox, is a free and open-source web browser created by
the Mozilla Foundation and its subsidiary, the Mozilla Corporation [1].
By default, Firefox collects telemetry data and has other features that gather information about
your downloaded files and browsed webpages [2][3].
The scripts provided here adjust your Firefox installation to prevent its data collection.
[1]: https://web.archive.org/web/20221029173029/https://en.wikipedia.org/wiki/Firefox "Firefox | Wikipedia | en.wikipedia.org"
[2]: https://web.archive.org/web/20220901045358/https://support.mozilla.org/en-US/kb/telemetry-clientid "Telemetry collection and deletion | Firefox Help | support.mozilla.org"
[3]: https://web.archive.org/web/20221008150941/https://support.mozilla.org/en-US/kb/how-does-phishing-and-malware-protection-work "How does built-in Phishing and Malware Protection work? | Firefox Help | support.mozilla.org"
children:
-
category: Harden Firefox privacy
docs: |-
The following are privacy-focused tweaks to prevent browser fingerprinting and tracking.
See also: [What is browser fingerprinting? | AmIUnique.org](https://web.archive.org/web/20221029223510/https://www.amiunique.org/faq)
children:
-
category: Enable Firefox state partitioning (Total Cookie Protection)
docs: |-
Web browsers, including Firefox, save various data types such as cookies, cache, and site-specific details.
While this data helps in providing a faster and personalized browsing experience, it can be exploited by websites to track
your activities across the internet, potentially compromising your privacy.
State partitioning, also known as "Total Cookie Protection" [1], is a feature designed to enhance user privacy in Firefox.
It works by allocating different, isolated storage spaces for every website you visit [2]. This means that each website has its own
"compartment" where it saves its data, separate from other sites [2]. This structure limits websites' capabilities to track users
across various domains.
The underlying technology for state partitioning in Firefox is termed "double-keying" [1]. In this method, when a website intends
to store data, Firefox attaches an extra identifier tied to the site's origin, ensuring unique data storage for each site [1]. For
example, if two different sites incorporate content from the same third-party source, each of these sites will have its own unique
version of the third-party's data (like cookies) due to state partitioning [1]. This impedes the third-party's tracking ability
between the sites.
This protection isn't just against known trackers [1]. Firefox applies state partitioning to all third-party content on a site,
ensuring a comprehensive privacy coverage, beyond just identifiable tracking sources [1] [3].
A notable misuse by some trackers is the creation of "supercookies" [4]. Contrary to standard cookies, which users can delete easily,
supercookies are harder to eliminate and block, posing a considerable privacy challenge. Through state partitioning, Firefox renders
supercookies ineffective for tracking users across sites [4]. As a part of this feature, Firefox not only ensures site-specific data
but also partitions multiple caches, such as HTTP cache, image cache, and favicon cache [4]. This partitioning prevents any potential
cache exploitation for tracking purposes [4].
In summary, enabling state partitioning in Firefox is a powerful privacy tool, helping to defend users from potential online tracking
and offering a more private browsing experience.
[1]: https://web.archive.org/web/20230918171957/https://hacks.mozilla.org/2021/02/introducing-state-partitioning/ "Introducing State Partitioning - Mozilla Hacks - the Web developer blog"
[2]: https://web.archive.org/web/20230918172155/https://developer.mozilla.org/en-US/docs/Web/Privacy/State_Partitioning "State Partitioning - Privacy on the web | MDN"
[3]: https://web.archive.org/web/20230918172352/https://blog.mozilla.org/security/2021/02/23/total-cookie-protection/ "Firefox 86 Introduces Total Cookie Protection - Mozilla Security Blog"
[4]: https://web.archive.org/web/20230918172503/https://blog.mozilla.org/security/2021/01/26/supercookie-protections/ "Firefox 85 Cracks Down on Supercookies - Mozilla Security Blog"
children:
-
name: Enable dynamic First-Party Isolation (dFPI)
recommend: standard
docs: |-
Dynamic First-Party Isolation, also known as dFPI, is an advanced privacy feature in Firefox. This feature commonly
referred to as:
- Total Cookie Protection [1],
- dFPI (dynamic First-Party Isolation) [2],
- Dynamic storage partitioning [3].
Essentially, dFPI is an enhanced version of a previous privacy tool known as First-Party Isolation (FPI) [4].
The primary purpose of dFPI is to improve user privacy online. It accomplishes this by preventing third-party websites from
accessing or tracking a user's data across different websites [1] [3].
By default, this feature is activated for all Firefox desktop users [5].
Within Firefox's settings, there's an option called `network.cookie.cookieBehavior` which governs how dFPI operates.
This setting has three potential values [3]:
- `5`: The browser will block known trackers and partition storage for third-party content.
- `4`: Only known trackers will be blocked without any partitioning of third-party storage.
- `0`: All trackers and third-party content are allowed.
This script sets the value to `5`, ensuring the highest level of privacy by blocking trackers and partitioning third-party
storage. This aligns with recommended privacy practices because even if you choose the `4` value, the older First-Party
Isolation (FPI) will still be active [6].
[1]: https://web.archive.org/web/20231003094145/https://support.mozilla.org/en-US/kb/total-cookie-protection-and-website-breakage-faq "Total Cookie Protection and website breakage FAQ | Firefox Help"
[2]: https://web.archive.org/web/20231003094154/https://bugzilla.mozilla.org/show_bug.cgi?id=1746646 "1746646 - (tcp-mochitests) [meta] Make mochitests work with TCP enabled (cookieBehavior = 5) | bugzilla.mozilla.org"
[3]: https://web.archive.org/web/20230918172155/https://developer.mozilla.org/en-US/docs/Web/Privacy/State_Partitioning#disable_dynamic_state_partitioning "State Partitioning - Privacy on the web | MDN"
[4]: https://web.archive.org/web/20231003094207/https://bugzilla.mozilla.org/show_bug.cgi?id=1649876#c5 "1649876 - Migrate FPI users to dFPI | bugzilla.mozilla.org"
[5]: https://blog.mozilla.org/en/products/firefox/firefox-rolls-out-total-cookie-protection-by-default-to-all-users-worldwide/ "Firefox Rolls Out Total Cookie Protection By Default"
[6]: https://web.archive.org/web/20231003094350/https://bugzilla.mozilla.org/show_bug.cgi?id=1631676#c25 "1631676 - Disable dfpi when privacy.firstparty.isolate=true | bugzilla.mozilla.org"
call:
function: AddFirefoxPrefs
parameters:
prefName: network.cookie.cookieBehavior
jsonValue: '5'
-
name: Enable Firefox network partitioning
recommend: standard
docs: |-
Network partitioning is a method used by Firefox to enhance user privacy [1]. When enabled, each website you visit has its own
isolated storage location, preventing it from accessing data from another website [1]. This limits the ability of websites to track
users across multiple sites [1].
Network Partitioning, formerly referred to as *cache partitioning* [2], is a subset of state partitioning [1]. While state partitioning
deals with data like cookies, network partitioning deals with networking-related components, such as caches and connection pools [1].
It ensures that these components are isolated to each website, further enhancing user privacy [1].
Firefox has enabled network partitioning by default since version 85 [1]. Once enabled, network partitioning becomes permanent,
meaning websites cannot bypass or weaken its restrictions [1].
Network partitioning can be controlled with the `privacy.partition.network_state` preference [1].
[1]: https://web.archive.org/web/20230918172155/https://developer.mozilla.org/en-US/docs/Web/Privacy/State_Partitioning "State Partitioning - Privacy on the web | MDN"
[2]: https://web.archive.org/web/20231003094417/https://bugzilla.mozilla.org/show_bug.cgi?id=1687569 "1687569 - cache partitioning causes web page saving extensions to waste more time and data | bugzilla.mozilla.org"
call:
function: AddFirefoxPrefs
parameters:
prefName: privacy.partition.network_state
jsonValue: 'true'
-
name: Disable outdated Firefox First-Party Isolation (FPI)
recommend: strict
docs: |-
First-party isolation (FPI) helps in preventing third parties from tracking users across multiple websites [1] [2]. This is sometimes
referred to as "double keying" (double-keying) [1] or supercookies [1] [2].
This script disables FPI in favor of a newer technology called dynamic First-Party Isolation (dFPI) for the following reasons:
1. FPI and dFPI conflict with each other, and they cannot function simultaneously [3] [4]. Additionally, Mozilla doesn't plan to make
them compatible [5].
2. FPI has been marked as deprecated and is expected to be phased out [3], with dFPI set to become the standard in the future [6].
3. dFPI, when combined with network partitioning, offers broader and more effective privacy coverage than FPI, being essentially a
superset of FPI [3] [7].
[1]: https://web.archive.org/web/20221025162743/https://wiki.archlinux.org/title/Firefox/Privacy#First_party_isolation "Firefox/Privacy - ArchWiki | wiki.archlinux.org"
[2]: https://web.archive.org/web/20221025200527/https://bugzilla.mozilla.org/show_bug.cgi?id=1397624#c0 "1397624 - Provide an option for first-party isolation in Private Browsing Mode | bugzilla.mozilla.org"
[3]: https://web.archive.org/web/20231003094207/https://bugzilla.mozilla.org/show_bug.cgi?id=1649876#c0 "1649876 - Migrate FPI users to dFPI | bugzilla.mozilla.org"
[4]: https://web.archive.org/web/20231003094350/https://bugzilla.mozilla.org/show_bug.cgi?id=1631676#c25 "1631676 - Disable dfpi when privacy.firstparty.isolate=true | bugzilla.mozilla.org"
[5]: https://web.archive.org/web/20231003094207/https://bugzilla.mozilla.org/show_bug.cgi?id=1649876#c3 "1649876 - Migrate FPI users to dFPI | bugzilla.mozilla.org"
[6]: https://web.archive.org/web/20231003094207/https://bugzilla.mozilla.org/show_bug.cgi?id=1649876#c5 "1649876 - Migrate FPI users to dFPI | bugzilla.mozilla.org"
[7]: https://web.archive.org/web/20231003094358/https://bugzilla.mozilla.org/show_bug.cgi?id=1637344#c2 "1637344 - Add message to show dFPI is incompatible with FPI | bugzilla.mozilla.org"
call:
function: AddFirefoxPrefs
parameters:
prefName: privacy.firstparty.isolate
jsonValue: 'false'
-
name: Enable Firefox tracking protection
recommend: standard
docs: |-
Firefox provides an option for Enhanced Tracking Protection [1], which blocks trackers that
gather information about your browsing behavior without disrupting site functionality [1].
This feature also includes protections against harmful scripts such as malware that drains
your battery [1].
This script enables the `privacy.resistFingerprinting` preference,
activating anti-fingerprinting [1][2].
Beyond privacy advantages; enabling tracking protection may reduce load time by 44% [3].
Note: If you are already using an ad blocker with the correct lists, tracking protection might
be redundant.
[1]: https://web.archive.org/web/20221025195851/https://support.mozilla.org/en-US/kb/enhanced-tracking-protection-firefox-desktop "Security/Tracking protection - MozillaWiki | support.mozilla.org"
[2]: https://web.archive.org/web/20221025195843/https://wiki.mozilla.org/Security/Tracking_protection#Prefs "Enhanced Tracking Protection in Firefox for desktop | Firefox Help | wiki.mozilla.org"
[3]: https://web.archive.org/web/20221025162743/https://wiki.archlinux.org/title/Firefox/Privacy#Tracking_protection "Firefox/Privacy - ArchWiki | wiki.archlinux.org"
call:
function: AddFirefoxPrefs
parameters:
prefName: privacy.trackingprotection.enabled
jsonValue: 'true'
-
name: Enable Firefox anti-fingerprinting (may break some websites)
recommend: strict
docs: |-
Fingerprinting Protection is a heavily developed experimental feature in Firefox [1].
As part of a project to integrate features from the Tor Browser, Mozilla launched an
anti-fingerprinting project in Firefox [2].
This script enables the `privacy.resistFingerprinting` preference, activating
anti-fingerprinting [1][2].
As an experimental feature, it might cause some website breakage [2], such as impacting web
speech functionality [3] and favicons [4].
[1]: https://web.archive.org/web/20221025201025/https://support.mozilla.org/en-US/kb/firefox-protection-against-fingerprinting "Firefox's protection against fingerprinting | Firefox Help | support.mozilla.org"
[2]: https://web.archive.org/web/20221025162743/https://wiki.archlinux.org/title/Firefox/Privacy#Anti-fingerprinting "Firefox/Privacy - ArchWiki | wiki.archlinux.org"
[3]: https://web.archive.org/web/20221025201301/https://bugzilla.mozilla.org/show_bug.cgi?id=1636707 "1636707 - Web speech functionality disabled if privacy.resistFingerprinting is set to true | bugzilla.mozilla.org"
[4]: https://web.archive.org/web/20221025201422/https://bugzilla.mozilla.org/show_bug.cgi?id=1452391#c5 "1452391 - PNG favicons show up as white square when privacy.resistFingerprinting is enabled | bugzilla.mozilla.org"
call:
function: AddFirefoxPrefs
parameters:
prefName: privacy.resistFingerprinting
jsonValue: 'true'
-
name: Disable WebRTC exposure of your private IP address in Firefox
recommend: standard
docs: |-
Websites can obtain your local IP address through WebRTC's peer-to-peer protocol, facilitated
by JavaScript [1].
WebRTC (Web Real-Time Communication) is a free and open-source project offering real-time
communication (RTC) via application programming interfaces (APIs) to web browsers and mobile
applications [2]. It enables audio and video communication to work inside web pages by facilitating
direct peer-to-peer communication, and thereby eliminating the need for plugin installations or native
app downloads [3]. Supported by Apple, Google, Microsoft, Mozilla, and Opera, WebRTC's
specifications have been published by the World Wide Web Consortium (W3C) and the Internet
Engineering Task Force (IETF) [2].
[1]: https://web.archive.org/web/20221025162743/https://wiki.archlinux.org/title/Firefox/Privacy#WebRTC_exposes_LAN_IP_address "WebRTC exposes LAN IP address | Firefox/Privacy - ArchWiki | wiki.archlinux.org"
[2]: https://web.archive.org/web/20221029173118/https://en.wikipedia.org/wiki/WebRTC "WebRTC - Wikipedia | en.wikipedia.org"
[3]: https://web.archive.org/web/20221029173306/https://blogs.trilogy-lte.com/post/77427158750/how-webrtc-is-revolutionizing-telephony "How WebRTC Is Revolutionizing Telephony | blogs.trilogy-lte.com"
call:
function: AddFirefoxPrefs
parameters:
prefName: media.peerconnection.ice.default_address_only
jsonValue: 'true'
-
category: Disable Firefox telemetry
docs: |-
By default, Firefox collects telemetry data [1]. This data comprises two main categories:
**interaction data** and **technical data** [1].
**Interaction data** includes metrics such as the number of open tabs and windows, the number of
webpages visited, the number and type of installed Firefox Add-ons, session length, and
interactions with features offered by Mozilla or third parties. These features may include
Firefox search features and search partner referrals [1].
**Technical data** provides information about your Firefox version and language, device operating
system and hardware configuration, memory, basic crash and error information, as well as the
outcome of automated processes like updates and safe browsing [1].
Note that Firefox logs your personally identifiable IP address [1].
[1]: https://web.archive.org/web/20220901045358/https://support.mozilla.org/en-US/kb/telemetry-clientid "Telemetry collection and deletion | Firefox Help | support.mozilla.org"
children:
-
name: Disable collection of technical and interaction data in Firefox
recommend: standard
docs: |-
This script alters the `datareporting.healthreport.uploadEnabled` preference, effectively
disabling it. This preference regulates whether Firefox sends telemetry data [1].
The script halts all data transmitted from Firefox to Mozilla via Telemetry [2], preventing
Firefox from sending technical and interaction data to Mozilla [3].
For reasons of military security, it's recommended by the U.S. government (NIST 800-53) that
this data collection is disabled [4].
[1]: https://web.archive.org/web/20221015102124/https://firefox-source-docs.mozilla.org/toolkit/components/telemetry/internals/preferences.html "Preferences and Defines — Firefox Source Docs documentation | firefox-source-docs.mozilla.org"
[2]: https://web.archive.org/web/20221015103136/https://bugzilla.mozilla.org/show_bug.cgi?id=1195552#c4
[3]: https://web.archive.org/web/20221015102419/https://bugzilla.mozilla.org/show_bug.cgi?id=1422689#c1
[4]: https://web.archive.org/web/20221015103404/https://www.stigviewer.com/stig/mozilla_firefox/2019-01-02/finding/V-79053
call:
function: AddFirefoxPrefs
parameters:
prefName: datareporting.healthreport.uploadEnabled
jsonValue: 'false'
-
name: Disable detailed telemetry collection in Firefox
recommend: standard
docs: |-
This script disables the `toolkit.telemetry.enabled` preference, which controls whether the
Telemetry module is enabled [1].
It's configured to be enabled in nightly, aurora, beta, or default (developer) builds.
In release builds, however, it's set to false [1]. This setting is hard-coded into the C++
code to prevent easy disabling [2]. Developers have been approached about this issue but
have rejected proposals to unlock it [3].
Mozilla's plan is to deprecate this setting eventually, followed by removal [1].
This preference controls telemetry verbosity and configures Firefox to collect less data [3].
For reasons of military security, the U.S. government (NIST 800-53) recommends disabling this
setting [4].
[1]: https://web.archive.org/web/20221015102124/https://firefox-source-docs.mozilla.org/toolkit/components/telemetry/internals/preferences.html "Preferences and Defines — Firefox Source Docs documentation | firefox-source-docs.mozilla.org"
[2]: https://web.archive.org/web/20221015102305/https://searchfox.org/mozilla-central/source/modules/libpref/Preferences.cpp#3213
[3]: https://web.archive.org/web/20221015102419/https://bugzilla.mozilla.org/show_bug.cgi?id=1422689#c1
[4]: https://web.archive.org/web/20221015102604/https://stigviewer.com/stig/mozilla_firefox/2020-12-10/finding/V-223170
call:
function: AddFirefoxPrefs
parameters:
prefName: toolkit.telemetry.enabled
jsonValue: 'false'
-
name: Disable archiving of Firefox telemetry
recommend: standard
docs: |-
This script configures the `toolkit.telemetry.archive.enabled` preference to be disabled, thus
preventing telemetry pings from being archived locally [1].
For reasons of military security, the U.S. government (NIST 800-53) recommends disabling this
setting [2].
[1]: https://web.archive.org/web/20221015102124/https://firefox-source-docs.mozilla.org/toolkit/components/telemetry/internals/preferences.html "Preferences and Defines — Firefox Source Docs documentation | firefox-source-docs.mozilla.org"
[2]: https://web.archive.org/web/20221015104801/https://stigviewer.com/stig/mozilla_firefox/2020-12-10/finding/V-223171
call:
function: AddFirefoxPrefs
parameters:
prefName: toolkit.telemetry.archive.enabled
jsonValue: 'false'
-
name: Disable Firefox unified telemetry
recommend: standard
docs: |-
This script is designed to disable the `toolkit.telemetry.unified` preference.
If this preference is enabled, it results in two effects:
1. Firstly, telemetry will always be enabled and recording base data [1].
2. Secondly, additional main pings will be sent [1].
This preference is enabled by default [1].
The `toolkit.telemetry.unified` preference signifies whether the Telemetry system is operating
in Unified mode or not [2]. However, it's worth noting that this feature is planned to be phased
out and is considered as legacy by the developers [2].
[1]: https://web.archive.org/web/20221015102124/https://firefox-source-docs.mozilla.org/toolkit/components/telemetry/internals/preferences.html "Preferences and Defines — Firefox Source Docs documentation | firefox-source-docs.mozilla.org"
[2]: https://web.archive.org/web/20221015105731/https://bugzilla.mozilla.org/show_bug.cgi?id=1406390#c2
call:
function: AddFirefoxPrefs
parameters:
prefName: toolkit.telemetry.unified
jsonValue: 'false'
-
category: Disable Firefox telemetry logs
docs: |-
Firefox logs telemetry information in various locations, such as the console and `stdout` [1].
This logged information reveals details about your usage pattern.
[1]: https://web.archive.org/web/20221015102124/https://firefox-source-docs.mozilla.org/toolkit/components/telemetry/internals/preferences.html "Preferences and Defines — Firefox Source Docs documentation | firefox-source-docs.mozilla.org"
children:
-
name: Minimize Firefox telemetry logging verbosity
recommend: standard
docs: |-
This script sets the `toolkit.telemetry.log.level` preference to the least verbosity to minimize logs.
This preference adjusts the telemetry logging verbosity as per `Log.jsm` [1].
By default, logging is restricted to the console service [1].
It displays telemetry information in the browser console [2] and can be used to monitor telemetry activity
in the JavaScript console [3]. This process is also referred to as telemetry tracing [4].
The output can be accessed via the DevTools console [4], navigable through the menu by selecting
"Tools" => "Developer Tools" => "Error Console" (CTRL+SHIFT+J).
The available verbosity levels, in descending order, are `Trace`, `Debug`, `Config`, `Info`, `Warn` (default),
`Error`, and `Fatal` [1].
[1]: https://web.archive.org/web/20221015102124/https://firefox-source-docs.mozilla.org/toolkit/components/telemetry/internals/preferences.html "Preferences and Defines — Firefox Source Docs documentation | firefox-source-docs.mozilla.org"
[2]: https://web.archive.org/web/20221029134403/https://firefox-source-docs.mozilla.org/toolkit/components/telemetry/start/index.html "Getting started — Firefox Source Docs documentation | firefox-source-docs.mozilla.org"
[3]: https://web.archive.org/web/20221025154541/https://hg.mozilla.org/comm-central/rev/f8a6cf1ee08f8223c36bb92414e29734d8d6c9d9 "comm-central: changeset 28531:f8a6cf1ee08f8223c36bb92414e29734d8d6c9d9 | hg.mozilla.org"
[4]: https://web.archive.org/web/20221025154517/https://hg.mozilla.org/comm-central/file/tip/mail/components/telemetry/README.md#l81 "comm-central: mail/components/telemetry/README.md@a2958dfb3462eac068cb1a2c75c5213fc4808b1a | hg.mozilla.org"
call:
function: AddFirefoxPrefs
parameters:
prefName: toolkit.telemetry.log.level
jsonValue: >-
"Fatal"
-
name: Disable Firefox telemetry log output
recommend: standard
docs: |-
This script adjusts the `toolkit.telemetry.log.dump` setting to its most restricted value.
This preference controls whether to dump telemetry log messages to `stdout` [1].
[1]: https://web.archive.org/web/20221015102124/https://firefox-source-docs.mozilla.org/toolkit/components/telemetry/internals/preferences.html "Preferences and Defines — Firefox Source Docs documentation | firefox-source-docs.mozilla.org"
call:
function: AddFirefoxPrefs
parameters:
prefName: toolkit.telemetry.log.dump
jsonValue: >-
"Fatal"
-
name: Clear Firefox telemetry user ID
recommend: standard
docs: |-
Firefox uses `toolkit.telemetry.cachedClientID` as an identifier for the client and/or the user [1] [2] [3].
This ID is static and is used to identify the user [3].
[1]: https://web.archive.org/web/20221025162743/https://wiki.archlinux.org/title/Firefox/Privacy "Firefox/Privacy - ArchWiki | wiki.archlinux.org"
[2]: https://web.archive.org/web/20221025163051/https://hg.mozilla.org/mozilla-central/file/tip/toolkit/components/telemetry/app/TelemetryUtils.jsm#l101 "mozilla-central: toolkit/components/telemetry/app/TelemetryUtils.jsm@41ff1810fc5e1ee4ccdea2f1f81fcfc6d04d0fa1"
[3]: https://web.archive.org/web/20221025163051/https://hg.mozilla.org/mozilla-central/file/tip/toolkit/components/telemetry/app/TelemetryUtils.jsm#l29 "mozilla-central: toolkit/components/telemetry/app/TelemetryUtils.jsm@41ff1810fc5e1ee4ccdea2f1f81fcfc6d04d0fa1"
call:
function: AddFirefoxPrefs
parameters:
prefName: toolkit.telemetry.cachedClientID
jsonValue: '""'
-
category: Disable Firefox telemetry pings
docs: |-
A telemetry ping refers to the data that Firefox transmits to Mozilla's Telemetry servers [1].
It comes in different types and includes information collected by telemetry [1].
[1]: https://web.archive.org/web/20221025163526/https://firefox-source-docs.mozilla.org/toolkit/components/telemetry/concepts/pings.html "Telemetry pings — Firefox Source Docs documentation | firefox-source-docs.mozilla.org"
children:
-
name: Disable pings to Firefox telemetry server
recommend: standard
docs: |-
This script sets `toolkit.telemetry.server` to be empty.
This preference defines the server to which Telemetry pings are sent [1].
[1]: https://web.archive.org/web/20221015102124/https://firefox-source-docs.mozilla.org/toolkit/components/telemetry/internals/preferences.html "Preferences and Defines — Firefox Source Docs documentation | firefox-source-docs.mozilla.org"
call:
function: AddFirefoxPrefs
parameters:
prefName: toolkit.telemetry.server
jsonValue: '""'
-
name: Disable Firefox shutdown ping
recommend: standard
docs: |-
The shutdown ping provides data about a clean shutdown [1].
This script turns off three preferences to disable shutdown pings:
1. `toolkit.telemetry.shutdownPingSender.enabled`: This preference permits the shutdown ping
to be sent when the browser is closed from the second browsing session onwards, as opposed
to on the next restart, through the ping sender [2].
2. `toolkit.telemetry.shutdownPingSender.enabledFirstSession`: This preference allows the
shutdown ping to be sent through the ping sender from the first browsing session [2].
3. `toolkit.telemetry.firstShutdownPing.enabled`: This preference permits a duplicate of
the main shutdown ping from the first browsing session to be sent as a separate
`first-shutdown` ping [2].
[1]: https://web.archive.org/web/20221030201323/https://wiki.mozilla.org/QA/Shutdown_Ping#Test_Objectives "QA/Shutdown Ping - MozillaWiki | wiki.mozilla.org"
[2]: https://web.archive.org/web/20221015102124/https://firefox-source-docs.mozilla.org/toolkit/components/telemetry/internals/preferences.html "Preferences and Defines — Firefox Source Docs documentation | firefox-source-docs.mozilla.org"
call:
-
function: AddFirefoxPrefs
parameters:
prefName: toolkit.telemetry.shutdownPingSender.enabled
jsonValue: 'false'
-
function: AddFirefoxPrefs
parameters:
prefName: toolkit.telemetry.shutdownPingSender.enabledFirstSession
jsonValue: 'false'
-
function: AddFirefoxPrefs
parameters:
prefName: toolkit.telemetry.firstShutdownPing.enabled
jsonValue: 'false'
-
name: Disable Firefox new profile ping
recommend: standard
docs: |-
This script disables the `new-profile` ping sent from Firefox Desktop.
This ping is typically sent 30 minutes after the browser starts, during the first session of
a newly created profile [1]. If the first session of a new profile is shorter than
30 minutes, the ping is sent at shutdown using the Ping Sender [1].
This script sets the `toolkit.telemetry.newProfilePing.enabled` preference to disabled,
which effectively disables the `new-profile` ping for new profiles [2].
[1]: https://web.archive.org/web/20221025172041/https://firefox-source-docs.mozilla.org/toolkit/components/telemetry/data/new-profile-ping.html "“new-profile” ping — Firefox Source Docs documentation"
[2]: https://web.archive.org/web/20221015102124/https://firefox-source-docs.mozilla.org/toolkit/components/telemetry/internals/preferences.html "Preferences and Defines — Firefox Source Docs documentation | firefox-source-docs.mozilla.org"
call:
function: AddFirefoxPrefs
parameters:
prefName: toolkit.telemetry.newProfilePing.enabled
jsonValue: 'false'
-
name: Disable Firefox update ping
recommend: standard
docs: |-
This script disables the `update` ping sent from Firefox Desktop.
This ping is sent when a browser update is ready to be applied and also after the update has
been successfully applied [1].
This script sets the `toolkit.telemetry.updatePing.enabled` preference to disabled,
which turns off the "update" ping associated with browser updates [2].
[1]: https://web.archive.org/web/20221025174136/https://firefox-source-docs.mozilla.org/toolkit/components/telemetry/data/update-ping.html "“update” ping — Firefox Source Docs documentation | firefox-source-docs.mozilla.org"
[2]: https://web.archive.org/web/20221015102124/https://firefox-source-docs.mozilla.org/toolkit/components/telemetry/internals/preferences.html "Preferences and Defines — Firefox Source Docs documentation | firefox-source-docs.mozilla.org"
call:
function: AddFirefoxPrefs
parameters:
prefName: toolkit.telemetry.updatePing.enabled
jsonValue: 'false'
-
name: Disable Firefox prio ping
recommend: standard
docs: |-
This script disables the `prio` ping sent from Firefox Desktop.
The ping is submitted at least once a day for sessions that last longer than 24 hours [1],
and it is enabled by default [2].
It sends **Origin Telemetry** [1], which allows Mozilla to get precise counts of how
many Firefox clients perform certain activities on specific origins without revealing
which clients were doing which things on which origins [3].
This script sets the `toolkit.telemetry.prioping.enabled` preference to disabled, which
turns off the `prio` ping [2].
[1]: https://web.archive.org/web/20221025174031/https://firefox-source-docs.mozilla.org/toolkit/components/telemetry/data/prio-ping.html "“prio” ping — Firefox Source Docs documentation | firefox-source-docs.mozilla.org"
[2]: https://web.archive.org/web/20221015102124/https://firefox-source-docs.mozilla.org/toolkit/components/telemetry/internals/preferences.html "Preferences and Defines — Firefox Source Docs documentation | firefox-source-docs.mozilla.org"
[3]: https://web.archive.org/web/20221025174037/https://firefox-source-docs.mozilla.org/toolkit/components/telemetry/collection/origin.html#origintelemetry "Origin Telemetry — Firefox Source Docs documentation | firefox-source-docs.mozilla.org"
call:
function: AddFirefoxPrefs
parameters:
prefName: toolkit.telemetry.prioping.enabled
jsonValue: 'false'
-
category: Disable Firefox Pioneer program
docs: |-
Firefox Pioneer is a system in Firefox to test new features and changes on a subset of Firefox users [1].
Pioneer program sends private/sensitive data to Mozilla [2] [3].
[1]: https://web.archive.org/web/20221025161925/https://www.ghacks.net/2017/11/15/what-is-firefox-pioneer/ "What is Firefox Pioneer? - gHacks Tech News | ghacks.net"
[2]: https://web.archive.org/web/20221025160326/https://support.mozilla.org/en-US/questions/1224660 "What is a firefox pioneer example of how data will be used and how can this lead to a better user experience? | Firefox Support Forum | Mozilla Support"
[3]: https://web.archive.org/web/20221025162028/https://medium.com/firefox-context-graph/make-firefox-better-with-pioneer-10c82d0f9301 "Make Firefox Better With Pioneer. Data is the lifeblood of any product… | by Toby Elliott | Firefox Context Graph | Medium"
children:
-
name: Disable Firefox Pioneer study monitoring
recommend: standard
docs: |-
This script configures `toolkit.telemetry.pioneer-new-studies-available` to be disabled to opt out.
Firefox Pioneer program.
This setting disables availability check for Firefox Pioneer studies [1].
[1]: https://web.archive.org/web/20221025155900/https://hg.mozilla.org/mozilla-central/rev/eed56319e02a52e465929b50cccab29e34102833 "mozilla-central: changeset 539130:eed56319e02a52e465929b50cccab29e34102833 | hg.mozilla.org"
call:
function: AddFirefoxPrefs
parameters:
prefName: toolkit.telemetry.pioneer-new-studies-available
jsonValue: 'false'
-
name: Clear Firefox pioneer program ID
recommend: standard
docs: |-
If a user has chosen to participate in the Pioneer program, their Pioneer ID will be stored in this
field [1]. This ID serves as a link between user data and Mozilla servers [2].
[1]: https://web.archive.org/web/20221015102124/https://firefox-source-docs.mozilla.org/toolkit/components/telemetry/internals/preferences.html "Preferences and Defines — Firefox Source Docs documentation | firefox-source-docs.mozilla.org"
[2]: https://web.archive.org/web/20221025162028/https://medium.com/firefox-context-graph/make-firefox-better-with-pioneer-10c82d0f9301 "Make Firefox Better With Pioneer. Data is the lifeblood of any product… | by Toby Elliott | Firefox Context Graph | Medium"
call:
function: AddFirefoxPrefs
parameters:
prefName: toolkit.telemetry.pioneerId
jsonValue: '""'
-
name: Disable connection tests (breaks automatic Wi-Fi login)
docs: |-
This script turns off the Firefox Captive Portal detection feature.
Firefox uses this feature to determine if a network connection requires a login, such as a
public Wi-Fi hotspot [1]. The test involves initiating an outgoing connection to Mozilla servers [1].
By default, these connection attempts occur at regular intervals [2][3].
This functionality could potentially expose your usage habits [4]. For instance, a public venue
like a hotel or restaurant might require you to input a password for internet access. If such a
portal is in place and blocking traffic, this feature prevents all other connection attempts,
possibly revealing your usage habits.
See also: [Captive portal | Wikipedia](https://web.archive.org/web/20221029223534/https://en.wikipedia.org/wiki/Captive_portal).
This script sets `network.captive-portal-service.enabled` to 'false', thereby disabling automatic
connections [1].
[1]: https://web.archive.org/web/20221025194630/https://support.mozilla.org/en-US/kb/how-stop-firefox-making-automatic-connections#w_network-detection "How to stop Firefox from making automatic connections | Firefox Help | support.mozilla.org"
[2]: https://web.archive.org/web/20221025201801/https://bugzilla.mozilla.org/show_bug.cgi?id=1363651 "1363651 - http://detectportal.firefox.com/ is hammering our firewalls | bugzilla.mozilla.org"
[3]: https://web.archive.org/web/20221025201846/https://bugzilla.mozilla.org/show_bug.cgi?id=1359697#c3 "1359697 - Don't poll for captive portal detection | bugzilla.mozilla.org"
[4]: https://web.archive.org/web/20221025162743/https://wiki.archlinux.org/title/Firefox/Privacy "Firefox/Privacy - ArchWiki | wiki.archlinux.org"
call:
function: AddFirefoxPrefs
parameters:
prefName: network.captive-portal-service.enabled
jsonValue: 'false'
-
category: Disable Firefox Phishing Protection (Safe Browsing) (decreases security)
docs: |-
Firefox's Safe Browsing feature, now referred to as Phishing Protection, is still internally
recognized as "Safe Browsing" [1].
To provide protection against phishing and malware, Firefox transmits the following data:
1. Partial address information for visited webpages [2].
2. Details such as name, origin, size, and hash of contents for downloaded files [2].
This data is sent to Google Safe Browsing [2] to aid in issuing warnings for downloaded files and
visited sites [2].
While Phishing Protection bolsters your security, it may decrease your privacy as it involves
sending data about the websites you visit and files you download to Google [1][2].
There have been concerns about the potential for Google Safe Browsing to be used for censorship
in the future, although this has not occurred as of yet [3].
[1]: https://web.archive.org/web/20221025192643/https://wiki.mozilla.org/Security/Safe_Browsing "Security/Safe Browsing - MozillaWiki | wiki.mozilla.org"
[2]: https://web.archive.org/web/20221025193000/https://support.mozilla.org/en-US/kb/how-does-phishing-and-malware-protection-work#w_what-information-is-sent-to-mozilla-or-its-partners-when-phishing-and-malware-protection-is-enabled
[3]: https://web.archive.org/web/20221025192516/https://www.usnews.com/opinion/articles/2016-06-22/google-is-the-worlds-biggest-censor-and-its-power-must-be-regulated "Google Is the World's Biggest Censor and Its Power Must Be Regulated | usnews.com"
children:
-
name: Disable blocking of unstable plugins in Firefox
docs: |-
This script sets `browser.safebrowsing.blockedURIs.enabled` to 'false', thereby disabling plugin
stability blocking [1].
Disabling this feature might have mixed implications:
- Disabling the blocking of unstable plugins can potentially expose the user to vulnerabilities associated with these plugins.
These plugins may include malware, which would compromise user privacy and data.
- It removes the need for data communication via Mozilla servers `addons.mozilla.org` for list retrieval [2]. This feature requires
frequent requests to download large amount of data.
If this blocking is removed, the user should be knowledgeable about the potential risks and will take precautions.
[1]: https://web.archive.org/web/20221025192643/https://wiki.mozilla.org/Security/Safe_Browsing#Prefs "Security/Safe Browsing - MozillaWiki | wiki.mozilla.org"
[2]: https://web.archive.org/web/20230811024650/https://blog.mozilla.org/addons/2020/08/24/introducing-a-scalable-add-ons-blocklist/ "Introducing a scalable add-ons blocklist | Mozilla Add-ons Community Blog"
call:
function: AddFirefoxPrefs
parameters:
prefName: browser.safebrowsing.blockedURIs.enabled
jsonValue: 'false'
-
name: Disable Firefox application reputation checks for downloads
docs: |-
This script pertains to a feature that safeguards users from malware downloads [1].
This protective measure operates by transmitting downloaded URL and file data to
Google's servers [3].
The script modifies `browser.safebrowsing.downloads.enabled` to a disabled state.
This adjustment consequently disables application reputation checks for downloaded files [1] [2].
Inhibiting this feature concurrently disables remote lookups
(`browser.safebrowsing.downloads.remote.enabled`) [1].
Read more: [Security/Features/Application Reputation Design Doc | wiki.mozilla.org](https://web.archive.org/web/20221025204612/https://wiki.mozilla.org/Security/Features/Application_Reputation_Design_Doc)
[1]: https://web.archive.org/web/20221025204436/https://wiki.mozilla.org/Security/Download_Protection "Security/Download Protection - MozillaWiki | wiki.mozilla.org"
[2]: https://web.archive.org/web/20221025162743/https://wiki.archlinux.org/title/Firefox/Privacy#Disable_.27Safe_Browsing.27_service "Firefox/Privacy - ArchWiki | wiki.archlinux.org"
[3]: https://web.archive.org/web/20221025204612/https://wiki.mozilla.org/Security/Features/Application_Reputation_Design_Doc "Security/Features/Application Reputation Design Doc - MozillaWiki | wiki.mozilla.org"
call:
function: AddFirefoxPrefs
parameters:
prefName: browser.safebrowsing.downloads.enabled
jsonValue: 'false'
-
name: Disable Firefox malware protection
docs: |-
Mozilla Firefox maintains a list of known malware, and checks user downloads against
this list [1]. If the user downloads a file that matches an entry in the list, a warning
can be displayed [1].
This script modifies `browser.safebrowsing.malware.enabled` to a disabled state.
This preference dictates whether to enable malware checks [1].
Disabling it halts the downloading of malware blacklists and ceases checks on downloads [1].
It is active by default [1].
Note that disabling this protection disrupts application reputation checks for downloaded files,
since it relies on this feature [2].
[1]: https://web.archive.org/web/20221025211950/https://kb.mozillazine.org/Browser.safebrowsing.malware.enabled "Browser.safebrowsing.malware.enabled - MozillaZine Knowledge Base | kb.mozillazine.org"
[2]: https://web.archive.org/web/20221025204436/https://wiki.mozilla.org/Security/Download_Protection "Security/Download Protection - MozillaWiki | wiki.mozilla.org"
call:
function: AddFirefoxPrefs
parameters:
prefName: browser.safebrowsing.malware.enabled
jsonValue: 'false'
-
name: Disable Firefox phishing protection
docs: |-
This script modifies `browser.safebrowsing.phishing.enabled` to a disabled state.
This preference determines whether to enable phishing protection [1] [2].
It is active by default [2].
[1]: https://web.archive.org/web/20221025192643/https://wiki.mozilla.org/Security/Safe_Browsing#Prefs "Security/Safe Browsing - MozillaWiki | wiki.mozilla.org"
[2]: https://web.archive.org/web/20221029173442/https://github.com/mozilla/policy-templates/blob/master/README.md#preferences "policy-templates/README.md at master · mozilla/policy-templates · GitHub | github.com"
call:
function: AddFirefoxPrefs
parameters:
prefName: browser.safebrowsing.phishing.enabled
jsonValue: 'false'
functions:
-
name: RunInlineCode
parameters:
- name: code
- name: revertCode
optional: true
code: '{{ $code }}'
revertCode: '{{ with $revertCode }}{{ . }}{{ end }}'
-
name: RunIfCommandExists # Skips if command does not exist
# Marked: refactor-with-partials
# Same function as macOS
parameters:
- name: command
- name: code
- name: revertCode
optional: true
code: |-
if ! command -v '{{ $command }}' &> /dev/null; then
echo 'Skipping because "{{ $command }}" is not found.'
else
{{ $code }}
fi
revertCode: |-
{{ with $revertCode }}
if ! command -v '{{ $command }}' &> /dev/null; then
>&2 echo 'Cannot revert because "{{ $command }}" is not found.'
else
{{ . }}
fi
{{ end }}
-
name: RunPython3Code
parameters:
- name: command
- name: code
- name: revertCode
optional: true
call:
function: RunIfCommandExists
parameters:
command: python3
code: |-
python3 <<EOF
{{ $code }}
EOF
revertCode: |-
{{ with $revertCode }}
python3 <<EOF
{{ . }}
EOF
{{ end }}
-
name: DeleteFileFromUserAndRootHome
parameters:
- name: file
code: |-
rm -fv ~/{{ $file }}
sudo rm -fv /root/{{ $file }}
-
name: SetVsCodeSetting
parameters:
- name: setting
- name: jsonValue
call:
function: RunPython3Code
parameters:
code: |-
from pathlib import Path
import os, json, sys
property_name = '{{ $setting }}'
target = json.loads('{{ $jsonValue }}')
home_dir = f'/home/{os.getenv("SUDO_USER", os.getenv("USER"))}'
settings_files = [
# Global installation (also Snap that installs with "--classic" flag)
f'{home_dir}/.config/Code/User/settings.json',
# Flatpak installation
f'{home_dir}/.var/app/com.visualstudio.code/config/Code/User/settings.json'
]
for settings_file in settings_files:
file=Path(settings_file)
if not file.is_file():
print(f'Skipping, file does not exist at "{settings_file}".')
continue
print(f'Reading file at "{settings_file}".')
file_content = file.read_text()
if not file_content.strip():
print('Settings file is empty. Treating it as default empty JSON object.')
file_content = '{}'
json_object = None
try:
json_object = json.loads(file_content)
except json.JSONDecodeError:
print(f'Error, invalid JSON format in the settings file: "{settings_file}".', file=sys.stderr)
continue
if property_name not in json_object:
print(f'Settings "{property_name}" is not configured.')
else:
existing_value = json_object[property_name]
if existing_value == target:
print(f'Skipping, "{property_name}" is already configured as {json.dumps(target)}.')
continue
print(f'Setting "{property_name}" has unexpected value {json.dumps(existing_value)} that will be changed.')
json_object[property_name] = target
new_content = json.dumps(json_object, indent=2)
file.write_text(new_content)
print(f'Successfully configured "{property_name}" to {json.dumps(target)}.')
revertCode: |-
from pathlib import Path
import os, json, sys
property_name = '{{ $setting }}'
target = json.loads('{{ $jsonValue }}')
home_dir = f'/home/{os.getenv("SUDO_USER", os.getenv("USER"))}'
settings_files = [
# Global installation (also Snap that installs with "--classic" flag)
f'{home_dir}/.config/Code/User/settings.json',
# Flatpak installation
f'{home_dir}/.var/app/com.visualstudio.code/config/Code/User/settings.json'
]
for settings_file in settings_files:
file=Path(settings_file)
if not file.is_file():
print(f'Skipping, file does not exist at "{settings_file}".')
continue
print(f'Reading file at "{settings_file}".')
file_content = file.read_text()
if not file_content.strip():
print(f'Skipping, no need to revert because settings file is empty: "{settings_file}".')
continue
try:
json_object = json.loads(file_content)
except json.JSONDecodeError:
print(f'Error, invalid JSON format in the settings file: "{settings_file}".', file=sys.stderr)
continue
if property_name not in json_object:
print(f'Skipping, "{property_name}" is not configured.')
continue
existing_value = json_object[property_name]
if existing_value != target:
print(f'Skipping, "{property_name}" is configured using {json.dumps(existing_value)} instead of {json.dumps(target)}.')
continue
del json_object[property_name]
new_content = json.dumps(json_object, indent=2)
file.write_text(new_content)
print(f'Successfully reverted "{property_name}" setting.')
-
name: UninstallPacmanPackage
parameters:
- name: packageName
call:
function: RunIfCommandExists
parameters:
command: pacman
code: |-
pkg_package_name='{{ $packageName }}'
if pacman -Qs "$pkg_package_name" > /dev/null ; then
echo "\"$pkg_package_name\" is installed and will be uninstalled."
sudo pacman -Rcns "$pkg_package_name" --noconfirm
else
echo "The package $pkg_package_name is not installed"
fi
revertCode: |-
pkg_package_name='{{ $packageName }}'
if pacman -Qs "$pkg_package_name" > /dev/null ; then
echo "Skipping, no action needed because \"$pkg_package_name\" is already installed."
else
echo "\"$pkg_package_name\" is not installed and will be reinstalled."
sudo pacman -S "$pkg_package_name" --noconfirm
fi
-
name: UninstallRPMPackage
parameters:
- name: packageName
call:
function: RunIfCommandExists
parameters:
command: dnf
code: |-
rpm_package_name='{{ $packageName }}'
sudo dnf autoremove -y --skip-broken "$rpm_package_name"
revertCode: |-
rpm_package_name='{{ $packageName }}'
sudo dnf install -y "$rpm_package_name"
-
name: UninstallAptPackage
parameters:
- name: packageName
call:
function: RunIfCommandExists
parameters:
command: apt-get
code: |-
apt_package_name='{{ $packageName }}'
if status="$(dpkg-query -W --showformat='${db:Status-Status}' "$apt_package_name" 2>&1)" \
&& [ "$status" = installed ]; then
echo "\"$apt_package_name\" is installed and will be uninstalled."
sudo apt-get purge -y "$apt_package_name"
else
echo "Skipping, no action needed, \"$apt_package_name\" is not installed."
fi
revertCode: |-
apt_package_name='{{ $packageName }}'
if status="$(dpkg-query -W --showformat='${db:Status-Status}' "$apt_package_name" 2>&1)" \
&& [ "$status" = installed ]; then
echo "Skipping, no action needed because \"$apt_package_name\" is already installed."
else
echo "\"$apt_package_name\" is not installed and will be reinstalled."
sudo apt-get install -y "$apt_package_name"
fi
-
name: DisableSystemdService
parameters:
- name: serviceName
call:
function: RunIfCommandExists
parameters:
command: systemctl
# `service` is wrapper supporting different backends such as systemctl
# However it lacks the "disable" command so we use lower level systemctl
code: |-
service='{{ $serviceName }}'
if systemctl list-units --full -all | grep --fixed-strings --quiet "$service"; then # service exists
if systemctl is-enabled --quiet "$service"; then
if systemctl is-active --quiet "$service"; then
echo "Service $service is running now, stopping it."
if ! sudo systemctl stop "$service"; then
>&2 echo "Could not stop $service."
else
echo 'Successfully stopped'
fi
fi
if sudo systemctl disable "$service"; then
echo "Successfully disabled $service."
else
>&2 echo "Failed to disable $service."
fi
else
echo "Skipping, $service is already disabled."
fi
else
echo "Skipping, $service does not exist."
fi
revertCode: |- # Not restarting/enabling service because the process/socket may need to be trigged by other hooks.
service='{{ $serviceName }}'
if systemctl list-units --full -all | grep --fixed-strings --quiet "$service"; then # service exists
if systemctl is-enabled --quiet "$service"; then
echo "Skipping, $service is already enabled."
else
if sudo systemctl enable "$service"; then
echo "Successfully enabled $service, it may require reboot to start."
else
>&2 echo "Failed to enable $service."
fi
fi
else
>&2 echo "Failed, $service does not exist."
fi
-
name: Comment
# 💡 Purpose:
# Adds a comment in the executed code for better readability and debugging.
# This function does not affect the execution flow but helps in understanding the purpose of subsequent code.
parameters:
- name: codeComment
optional: true
- name: revertCodeComment
optional: true
call:
function: RunInlineCode
parameters:
code: '{{ with $codeComment }}# {{ . }}{{ end }}'
revertCode: '{{ with $revertCodeComment }}# {{ . }}{{ end }}'
-
name: DeleteFiles
parameters:
- name: fileGlob
call:
-
function: Comment
parameters:
codeComment: >-
Delete files matching pattern: "{{ $fileGlob }}"
-
function: RunPython3Code
parameters:
code: |-
import glob
import os
path = '{{ $fileGlob }}'
expanded_path = os.path.expandvars(os.path.expanduser(path))
print(f'Deleting files matching pattern: {expanded_path}')
paths = glob.glob(expanded_path)
if not paths:
print('Skipping, no paths found.')
for path in paths:
if not os.path.isfile(path):
print(f'Skipping folder: "{path}".')
continue
os.remove(path)
print(f'Successfully delete file: "{path}".')
print(f'Successfully deleted {len(paths)} file(s).')
-
name: DeleteFilesFromFirefoxProfiles
parameters:
- name: pathGlob # file or folder in profile file
call:
- # Global installation
function: DeleteFiles
parameters:
fileGlob: ~/.mozilla/firefox/*/{{ $pathGlob }}
- # Flatpak installation
function: DeleteFiles
parameters:
fileGlob: ~/.var/app/org.mozilla.firefox/.mozilla/firefox/*/{{ $pathGlob }}
- # Snap installation
function: DeleteFiles
parameters:
fileGlob: ~/snap/firefox/common/.mozilla/firefox/*/{{ $pathGlob }}
-
name: CleanTableFromFirefoxProfileDatabase
parameters:
- name: databaseFileName
- name: tableName
call:
function: RunPython3Code
parameters:
code: |-
import os
import sqlite3
import glob
import sys
database_name = 'places.sqlite'
table_name = 'moz_inputhistory' # moz_historyvisits, moz_places
home_dir = f'/home/{os.getenv("SUDO_USER", os.getenv("USER"))}'
database_globs = [
# Global installation
f'{home_dir}/.mozilla/firefox/*/{database_name}',
# Flatpak installation
f'{home_dir}/.var/app/org.mozilla.firefox/.mozilla/firefox/*/{database_name}',
# Snap installation
f'{home_dir}/snap/firefox/common/.mozilla/firefox/*/{database_name}',
]
database_files = [file for files in [glob.glob(glob_pattern) for glob_pattern in database_globs] for file in files]
if not database_files:
print(f'Skipping, no "{database_name}" found.')
exit(0)
print(f'Total database files found: {len(database_files)}')
for file in database_files:
print(f'Cleaning "{table_name}" in: {file}')
try:
conn = sqlite3.connect(file)
cursor = conn.cursor()
cursor.execute(f'DELETE from {table_name}')
total_deleted = cursor.rowcount
print(f'Table was empty, no items were deleted.' if total_deleted == 0 else f'Total deleted items: {cursor.rowcount}')
except Exception as e:
print(f'Failed to delete: {e}', file=sys.stderr)
-
name: DeleteFileFromThunderbirdProfiles
parameters:
- name: file
code: |-
# {{ $file }}: Global installation
rm -fv ~/.thunderbird/*/{{ $file }}
# {{ $file }}: Flatpak installation
rm -fv ~/snap/thunderbird/common/.thunderbird/*/{{ $file }}
# {{ $file }}: Snap installation
rm -fv ~/.var/app/org.mozilla.Thunderbird/.thunderbird/*/{{ $file }}
-
name: DeleteFileFromGNOMEWebData
parameters:
- name: file
code: |-
# {{ $file }}: Global installation
rm -fv ~/.local/share/epiphany/{{ $file }}
# {{ $file }}: Flatpak installation
rm -fv ~/.var/app/org.gnome.Epiphany/data/epiphany/{{ $file }}
# {{ $file }}: Snap installation
rm -fv ~/snap/epiphany/*/.local/share/epiphany/{{ $file }}
-
name: ClearDirFromVsCodeUserDataDir
parameters:
- name: directory # Whitespaces must be escaped with /
code: |-
# {{ $directory }}: Global installation (also Snap with --classic)
rm -rfv ~/.config/Code/{{ $directory }}/*
# {{ $directory }}: Flatpak installation
rm -rfv ~/.var/app/com.visualstudio.code/config/Code/{{ $directory }}/*
-
name: PersistSystemEnvironmentVariable
parameters:
- name: variable
- name: value
# We can change different files:
# System-wide:
# [/etc/profile]
# Contains system wide shell initialization scripts.
# ❌ It's a configuration file of the base-files package, so it's not appropriate to edit that file directly.
# [/etc/profile.d/*.sh]
# Files with the .sh extension in the /etc/profile.d directory get executed whenever.
# a bash login shell is entered (e.g. when logging in from the console or over ssh).
# ✅ Recommended to be edited by Ubuntu.
# [/etc/environment]
# Used for system-wide environment variable settings.
# It is not a script file, but rather consists of assignment expressions, one per line..
# ✅ Owned by root, requires sudo.
# ✅ Shell agnostic.
# ✅ Recommended by Debian to edit for global environment variables.
# User-specific:
# [~/.profile]
# User-specific shell initialization scripts.
# ✅ Recomended by Debian to edit for user-specific environment variables.
# [~/.bashrc]
# User-based configuration file to set environment variables for Bash shell.
# ❌ Bash-specific.
# [~/.pam_environment]
# User-specific "/etc/environment"
# References:
# - https://web.archive.org/web/20221029173442/https://help.ubuntu.com/community/EnvironmentVariables
# - https://web.archive.org/web/20221029173630/https://wiki.archlinux.org/title/Environment_variables#Defining_variables
# - https://web.archive.org/web/20221029173825/https://wiki.debian.org/EnvironmentVariables
code: |-
variable='{{ $variable }}'
value='{{ $value }}'
declaration_file='/etc/environment'
if ! [ -f "$declaration_file" ]; then
echo "\"$declaration_file\" does not exist."
sudo touch "$declaration_file"
echo "Created $declaration_file."
fi
assignment_start="$variable="
assignment="$variable=$value"
if ! grep --quiet "^$assignment_start" "${declaration_file}"; then
echo "Variable \"$variable\" was not configured before."
echo -n $'\n'"$assignment" | sudo tee -a "$declaration_file" > /dev/null
echo "Successfully configured ($assignment)."
else
if grep --quiet "^$assignment$" "${declaration_file}"; then
echo "Skipping. Variable \"$variable\" is already set to value \"$value\"."
else
if ! sudo sed --in-place "/^$assignment_start/d" "$declaration_file"; then
>&2 echo "Failed to delete assignment starting with \"$assignment_start\"."
else
echo "Successfully deleted unexpected assignment of \"$variable\"."
if ! echo -n $'\n'"$assignment" | sudo tee -a "$declaration_file" > /dev/null; then
>&2 echo "Failed to add assignment \"$assignment\"."
else
echo "Successfully reconfigured ($assignment)."
fi
fi
fi
fi
revertCode: |-
variable='{{ $variable }}'
value='{{ $value }}'
declaration_file='/etc/environment'
if ! [ -f "$declaration_file" ]; then
echo "Skipping, \"$declaration_file\" does not exist."
else
assignment="$variable=$value"
if grep --quiet "^$assignment$" "${declaration_file}"; then
if sudo sed --in-place "/^$assignment$/d" "$declaration_file"; then
echo "Successfully deleted \"$variable\" with \"$value\"."
else
>&2 echo "Failed to delete \"$assignment\"."
fi
else
echo "Skipping, \"$variable\" with \"$value\" is not found."
fi
fi
-
name: DisableCronjob
parameters:
- name: jobName
# Cron is not restarted after changes because according to manpage:
# > …cron will then examine the modification time on all crontabs and reload those which have changed.
# > Thus cron need not be restarted whenever a crontab file is modified.
code: |-
job_name='{{ $jobName }}'
cronjob_path="/etc/cron.daily/$job_name"
if [[ -f "$cronjob_path" ]]; then
if [[ -x "$cronjob_path" ]]; then
sudo chmod -x "$cronjob_path"
echo "Succesfully disabled cronjob \"$job_name\"."
else
echo "Skipping, cronjob \"$job_name\" is already disabled."
fi
else
echo "Skipping, \"$job_name\" cronjob is not found."
fi
revertCode: |-
cronjob_path="/etc/cron.daily/$job_name"
if [[ -f "$cronjob_path" ]]; then
if [[ -x "$cronjob_path" ]]; then
echo "Skipping, cronjob \"$job_name\" is already enabled."
else
sudo chmod +x "$cronjob_path"
echo "Succesfully enabled cronjob \"$job_name\"."
fi
else
>&2 echo "Failed to enable cronjob \"$job_name\" because it's missing."
fi
-
name: AddFirefoxPrefs
parameters:
- name: prefName
- name: jsonValue
docs: |-
This script modifies the `user.js` file in Firefox profiles to set specific preferences.
The `user.js` file can be found in a Firefox profile folder [1] and its location depends on the type of installation:
- Default: `~/.mozilla/firefox/<profile-name>/user.js`
- Flatpak: `~/.var/app/org.mozilla.firefox/.mozilla/firefox/<profile-name>/user.js`
- Snap: `~/snap/firefox/common/.mozilla/firefox/<profile-name>/user.js`
While the `user.js` file is optional [2], if it's present, the Firefox will prioritize its settings over
those in `prefs.js` upon startup [1] [2]. It's recommended not to directly edit `prefs.js` to avoid profile corruption [2].
When `user.js` is modified or deleted, corresponding changes in `prefs.js` are necessary for reversion, as Firefox
doesn't automatically revert these changes [3].
This script safely modifies `user.js` and ensures changes are reflected in `prefs.js` during reversion, addressing
issues with preference persistence [3].
[1]: https://web.archive.org/web/20230811005205/https://kb.mozillazine.org/User.js_file "User.js file - MozillaZine Knowledge Base"
[2]: https://web.archive.org/web/20221029211757/https://kb.mozillazine.org/Prefs.js_file "Prefs.js file - MozillaZine Knowledge Base"
[3]: https://github.com/undergroundwires/privacy.sexy/issues/282 "[BUG]: Reverting Firefox settings do not work on Linux · Issue #282 · undergroundwires/privacy.sexy | github.com"
code: |-
pref_name='{{ $prefName }}'
pref_value='{{ $jsonValue }}'
echo "Setting preference \"$pref_name\" to \"$pref_value\"."
declare -a profile_paths=(
~/.mozilla/firefox/*/
~/.var/app/org.mozilla.firefox/.mozilla/firefox/*/
~/snap/firefox/common/.mozilla/firefox/*/
)
declare -i total_profiles_found=0
for profile_dir in "${profile_paths[@]}"; do
if [ ! -d "$profile_dir" ]; then
continue
fi
if [[ ! "$(basename "$profile_dir")" =~ ^[a-z0-9]{8}\..+ ]]; then
continue # Not a profile folder
fi
((total_profiles_found++))
user_js_file="${profile_dir}user.js"
echo "$user_js_file:"
if [ ! -f "$user_js_file" ]; then
touch "$user_js_file"
echo $'\t''Created new user.js file'
fi
pref_start="user_pref(\"$pref_name\","
pref_line="user_pref(\"$pref_name\", $pref_value);"
if ! grep --quiet "^$pref_start" "${user_js_file}"; then
echo -n $'\n'"$pref_line" >> "$user_js_file"
echo $'\t'"Successfully added a new preference in $user_js_file."
elif grep --quiet "^$pref_line$" "$user_js_file"; then
echo $'\t'"Skipping, preference is already set as expected in $user_js_file."
else
sed --in-place "/^$pref_start/c\\$pref_line" "$user_js_file"
echo $'\t'"Successfully replaced the existing incorrect preference in $user_js_file."
fi
done
if [ "$total_profiles_found" -eq 0 ]; then
echo 'No profile folders are found, no changes are made.'
else
echo "Successfully verified preferences in $total_profiles_found profiles."
fi
revertCode: |-
pref_name='{{ $prefName }}'
pref_value='{{ $jsonValue }}'
echo "Reverting preference: \"$pref_name\" to its default."
if command -v 'ps' &> /dev/null && ps aux | grep -i "[f]irefox" > /dev/null; then
>&2 echo -e "\e[33mWarning: Firefox is currently running. Please close Firefox before executing the revert script to ensure changes are applied effectively.\e[0m"
fi
declare -a files_to_modify=('prefs.js' 'user.js')
declare -a profile_paths=(
~/.mozilla/firefox/*/
~/.var/app/org.mozilla.firefox/.mozilla/firefox/*/
~/snap/firefox/common/.mozilla/firefox/*/
)
declare -i total_profiles_found=0
for profile_dir in "${profile_paths[@]}"; do
if [ ! -d "$profile_dir" ]; then
continue
fi
if [[ ! "$(basename "$profile_dir")" =~ ^[a-z0-9]{8}\..+ ]]; then
continue # Not a profile folder
fi
((total_profiles_found++))
for file_to_modify in "${files_to_modify[@]}"; do
config_file_path="${profile_dir}${file_to_modify}"
if [ ! -f "$config_file_path" ]; then
continue
fi
echo "$config_file_path:"
pref_start="user_pref(\"$pref_name\","
pref_line="user_pref(\"$pref_name\", $pref_value);"
if ! grep --quiet "^$pref_start" "${config_file_path}"; then
echo $'\t''Skipping, preference was not configured before.'
elif grep --quiet "^$pref_line$" "${config_file_path}"; then
sed --in-place "/^$pref_line/d" "$config_file_path"
echo $'\t''Successfully reverted preference to default.'
if ! grep --quiet '[^[:space:]]' "$config_file_path"; then
rm "$config_file_path"
echo $'\t'"Removed the file as it became empty."
fi
else
echo $'\t''Skipping, the preference has value that is not configured by privacy.sexy.'
fi
done
done
if [ "$total_profiles_found" -eq 0 ]; then
echo 'No reversion was necessary.'
else
echo "Successfully verified preferences in $total_profiles_found profiles."
fi
-
name: RenameFile
parameters:
- name: path
code: |-
file='{{ $path }}'
backup_file="${file}.old"
if [ -f "$file" ]; then
echo "File exists: $file."
sudo mv "$file" "$backup_file"
echo "Moved to: $backup_file."
else
echo "Skipping, no changes needed."
fi
revertCode: |-
file='{{ $path }}'
backup_file="${file}.old"
if [ -f "$backup_file" ]; then
echo "Backup file exists: $file."
sudo mv "$backup_file" "$file"
echo "Moved to: $file."
echo "Succesfully restored."
else
>&2 echo "Failed to restore, backup file could not be found at $backup_file."
>&2 echo "Was the change initially applied by privacy.sexy?"
fi
-
name: ReplaceFileContent
parameters:
- name: filePath
- name: newContent
code: |-
file='{{ $filePath }}'
new_content=$'{{ $newContent }}'
backup_file="${file}.backup"
if [ ! -f "$file" ]; then
>&2 echo "Skipping, original file missing at $file."
else
sudo mv "$file" "$backup_file"
echo "Successfully backed up existing $file"
echo -n $"$new_content" | sudo tee "$file" > /dev/null
echo "Successfully replaced $file"
fi
revertCode: |-
file='{{ $filePath }}'
backup_file="${file}.backup"
if [ ! -f "$backup_file" ]; then
>&2 echo "Failed, backup file is missing at $backup_file."
else
sudo rm -fv "$file"
sudo mv "$file.backup" "$file"
echo "Successfully restored from backup: $file"
fi