-------------------------------------------------- Commands from Issue 003 -------------------------------------------------- Linux Lifestyle: wget -O firefox.tar.bz2 'https://download.mozilla.org/?product=firefox-beta-latest-ssl&os=linux64&lang=en-US' tar xvf firefox.tar.bz2 mv firefox firefox-beta sudo mv firefox-beta /opt sudo ln -s /opt/firefox-beta/firefox /usr/local/bin/firefox-beta nano ~/.local/share/applications/firefox-beta.desktop [Desktop Entry] Name=Firefox Beta Comment=Web Browser Exec=/opt/firefox-beta/firefox %u Terminal=false Type=Application Icon=/opt/firefox-beta/browser/chrome/icons/default/default128.png Categories=Network;WebBrowser; wget -O firefox.tar.bz2 'https://download.mozilla.org/?product=firefox-devedition-latest-ssl&os=linux64&lang=en-US' tar xvf firefox.tar.bz2 mv firefox firefox-dev sudo mv firefox-dev /opt sudo ln -s /opt/firefox-dev/firefox /usr/local/bin/firefox-dev nano ~/.local/share/applications/firefox-dev.desktop [Desktop Entry] Name=Firefox Dev Comment=Web Browser Exec=/opt/firefox-dev/firefox %u Terminal=false Type=Application Icon=/opt/firefox-dev/browser/chrome/icons/default/default128.png Categories=Network;WebBrowser; ctrl-o enter ctrl-x rm firefox.tar.bz2 wget -O firefox.tar.bz2 'https://download.mozilla.org/?product=firefox-nightly-latest-ssl&os=linux64&lang=en-US' tar xvf firefox.tar.bz2 mv firefox firefox-nightly sudo mv firefox-nightly /opt sudo ln -s /opt/firefox-nightly/firefox /usr/local/bin/firefox-nightly nano ~/.local/share/applications/firefox-nightly.desktop [Desktop Entry] Name=Firefox Nightly Comment=Web Browser Exec=/opt/firefox-nightly/firefox %u Terminal=false Type=Application Icon=/opt/firefox-nightly/browser/chrome/icons/default/default128.png Categories=Network;WebBrowser; ctrl-o enter ctrl-x rm firefox.tar.bz2 flatpak search signal flatpak install flathub org.signal.Signal flatpak list flatpak update flatpak install flathub io.atom.Atom org.audacityteam.Audacity com.calibre_ebook.calibre org.gnome.DejaDup org.gnome.EasyTAG org.electrum.electrum im.riot.Riot org.mozilla.firefox org.freefilesync.FreeFileSync org.gimp.GIMP org.gnucash.GnuCash fr.handbrake.ghb org.keepassxc.KeePassXC tv.kodi.Kodi com.getmailspring.Mailspring com.gitlab.newsflash org.onlyoffice.desktopeditors ch.protonmail.protonmail-bridge org.signal.Signal org.standardnotes.standardnotes com.github.micahflee.torbrowser-launcher com.transmissionbt.Transmission org.videolan.VLC com.wire.WireDesktop -y sudo apt update && sudo apt install android-tools-adb bleachbit fdupes ffmpeg linphone nautilus-admin ripgrep virtualbox yt-dlp -y wget https://launchpad.net/veracrypt/trunk/1.25.9/+download/veracrypt-1.25.9-Ubuntu-22.04-amd64.deb sudo apt install ./veracrypt-1.25.9-Ubuntu-22.04-amd64.deb -y rm veracrypt-1.25.9-Ubuntu-22.04-amd64.deb curl -1sLf \ 'https://dl.cloudsmith.io/public/balena/etcher/setup.deb.sh' \ | sudo -E bash sudo apt update sudo apt install balena-etcher-electron -y wget https://protonvpn.com/download/protonvpn-stable-release_1.0.1-1_all.deb sudo dpkg -i protonvpn-stable-release_1.0.1-1_all.deb sudo apt update sudo apt install protonvpn -y gsettings list-recursively gsettings set org.gnome.desktop.background picture-uri '' gsettings set org.gnome.desktop.background primary-color 'rgb(66, 81, 100)' gsettings set org.gnome.shell favorite-apps [] gsettings set org.gnome.shell.extensions.dash-to-dock dock-position LEFT gsettings set org.gnome.shell favorite-apps "['org.gnome.Nautilus.desktop', 'protonvpn.desktop', 'org.keepassxc.KeePassXC.desktop', 'org.mozilla.firefox.desktop', 'firefox-beta.desktop', 'firefox-dev.desktop', 'firefox-nightly.desktop', 'org.signal.Signal.desktop', 'com.wire.WireDesktop.desktop', 'im.riot.Riot.desktop', 'org.standardnotes.standardnotes.desktop', 'com.getmailspring.Mailspring.desktop', 'com.gitlab.newsflash.desktop', 'io.atom.Atom.desktop', 'org.onlyoffice.desktopeditors.desktop', 'virtualbox.desktop', 'gnucash.desktop', 'org.electrum.electrum.desktop', 'tv.kodi.Kodi.desktop', 'org.freefilesync.FreeFileSync.desktop', 'org.gnome.gedit.desktop', 'org.gnome.Calculator.desktop', 'bleachbit-root.desktop', 'org.gnome.Terminal.desktop', 'gnome-control-center.desktop', 'io.elementary.appcenter.desktop', 'pop-cosmic-applications.desktop']" gsettings set org.gnome.shell.extensions.dash-to-dock dash-max-icon-size 20 sudo service bluetooth stop gsettings set org.gnome.desktop.privacy remember-recent-files false gsettings set org.gnome.desktop.privacy remove-old-temp-files true gsettings set org.gnome.desktop.privacy remove-old-trash-files true gsettings set org.gnome.desktop.session idle-delay 0 gsettings set org.gnome.nautilus.preferences show-delete-permanently true gsettings set org.gnome.nautilus.preferences show-hidden-files true gsettings set org.gtk.Settings.FileChooser show-hidden true gsettings set org.gnome.desktop.privacy old-files-age 1 gsettings set org.gnome.desktop.notifications show-banners false gsettings set org.gnome.desktop.interface show-battery-percentage true sudo apt install snapd -y snap install --devmode --beta anbox cd Downloads git clone https://github.com/choff/anbox-modules.git cd anbox-modules ./INSTALL.sh cd ~/Downloads adb install com.anonyome.mysudo_1.7.1-12989_minAPI24\(x86_64\)\(nodpi\)_apkmirror.com.apk ln -s ~/snap/anbox/common/app-data/applications/anbox ~/.local/share/applications/anbox adb shell wm density 320 -------------------------------------------------- Maintaining Multiple Signal Accounts: sudo apt install snapd sudo snap install signal-desktop sudo snap set system experimental.parallel-instances=true sudo snap install signal-desktop signal-desktop_2 sudo snap install signal-desktop signal-desktop_3 sudo snap install signal-desktop signal-desktop_4 -------------------------------------------------- Purging Gmail Data Automatically: function deleteForever() { var threads = GmailApp.search("in:trash"); for (var i = 0; i < threads.length; i++) { Gmail.Users.Messages.remove("me", threads[i].getId());}} -------------------------------------------------- Exporting Authy 2FA Seed Codes // QRious v4.0.2 | (C) 2017 Alasdair Mercer | GPL v3 License Based on jsqrencode | (C) 2010 tz@execpc.com | GPL v3 License !function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):t.QRious=e()}(this,function(){"use strict";function t(t,e){var n;return"function"==typeof Object.create?n=Object.create(t):(s.prototype=t,n=new s,s.prototype=null),e&&i(!0,n,e),n}function e(e,n,s,r){var o=this;return"string"!=typeof e&&(r=s,s=n,n=e,e=null),"function"!=typeof n&&(r=s,s=n,n=function(){return o.apply(this,arguments)}),i(!1,n,o,r),n.prototype=t(o.prototype,s),n.prototype.constructor=n,n.class_=e||o.class_,n.super_=o,n}function i(t,e,i){for(var n,s,a=0,h=(i=o.call(arguments,2)).length;a>1&1,n=0;n0;e--)n[e]=n[e]?n[e-1]^_.EXPONENT[v._modN(_.LOG[n[e]]+t)]:n[e-1];n[0]=_.EXPONENT[v._modN(_.LOG[n[0]]+t)]}for(t=0;t<=i;t++)n[t]=_.LOG[n[t]]},_checkBadness:function(){var t,e,i,n,s,r=0,o=this._badness,a=this.buffer,h=this.width;for(s=0;sh*h;)u-=h*h,c++;for(r+=c*v.N4,n=0;n=o-2&&(t=o-2,s>9&&t--);var a=t;if(s>9){for(r[a+2]=0,r[a+3]=0;a--;)e=r[a],r[a+3]|=255&e<<4,r[a+2]=e>>4;r[2]|=255&t<<4,r[1]=t>>4,r[0]=64|t>>12}else{for(r[a+1]=0,r[a+2]=0;a--;)e=r[a],r[a+2]|=255&e<<4,r[a+1]=e>>4;r[1]|=255&t<<4,r[0]=64|t>>4}for(a=t+3-(s<10);a=5&&(i+=v.N1+n[e]-5);for(e=3;et||3*n[e-3]>=4*n[e]||3*n[e+3]>=4*n[e])&&(i+=v.N3);return i},_finish:function(){this._stringBuffer=this.buffer.slice();var t,e,i=0,n=3e4;for(e=0;e<8&&(this._applyMask(e),(t=this._checkBadness())>=1)1&n&&(s[r-1-e+8*r]=1,e<6?s[8+r*e]=1:s[8+r*(e+1)]=1);for(e=0;e<7;e++,n>>=1)1&n&&(s[8+r*(r-7+e)]=1,e?s[6-e+8*r]=1:s[7+8*r]=1)},_interleaveBlocks:function(){var t,e,i=this._dataBlock,n=this._ecc,s=this._eccBlock,r=0,o=this._calculateMaxLength(),a=this._neccBlock1,h=this._neccBlock2,f=this._stringBuffer;for(t=0;t1)for(t=u.BLOCK[n],i=s-7;;){for(e=s-7;e>t-3&&(this._addAlignment(e,i),!(e6)for(t=d.BLOCK[r-7],e=17,i=0;i<6;i++)for(n=0;n<3;n++,e--)1&(e>11?r>>e-12:t>>e)?(s[5-i+o*(2-n+o-11)]=1,s[2-n+o-11+o*(5-i)]=1):(this._setMask(5-i,2-n+o-11),this._setMask(2-n+o-11,5-i))},_isMasked:function(t,e){var i=v._getMaskBit(t,e);return 1===this._mask[i]},_pack:function(){var t,e,i,n=1,s=1,r=this.width,o=r-1,a=r-1,h=(this._dataBlock+this._eccBlock)*(this._neccBlock1+this._neccBlock2)+this._neccBlock2;for(e=0;ee&&(i=t,t=e,e=i),i=e,i+=e*e,i>>=1,i+=t},_modN:function(t){for(;t>=255;)t=((t-=255)>>8)+(255&t);return t},N1:3,N2:3,N3:40,N4:10}),p=v,m=f.extend({draw:function(){this.element.src=this.qrious.toDataURL()},reset:function(){this.element.src=""},resize:function(){var t=this.element;t.width=t.height=this.qrious.size}}),g=h.extend(function(t,e,i,n){this.name=t,this.modifiable=Boolean(e),this.defaultValue=i,this._valueTransformer=n},{transform:function(t){var e=this._valueTransformer;return"function"==typeof e?e(t,this):t}}),k=h.extend(null,{abs:function(t){return null!=t?Math.abs(t):null},hasOwn:function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},noop:function(){},toUpperCase:function(t){return null!=t?t.toUpperCase():null}}),w=h.extend(function(t){this.options={},t.forEach(function(t){this.options[t.name]=t},this)},{exists:function(t){return null!=this.options[t]},get:function(t,e){return w._get(this.options[t],e)},getAll:function(t){var e,i=this.options,n={};for(e in i)k.hasOwn(i,e)&&(n[e]=w._get(i[e],t));return n},init:function(t,e,i){"function"!=typeof i&&(i=k.noop);var n,s;for(n in this.options)k.hasOwn(this.options,n)&&(s=this.options[n],w._set(s,s.defaultValue,e),w._createAccessor(s,e,i));this._setAll(t,e,!0)},set:function(t,e,i){return this._set(t,e,i)},setAll:function(t,e){return this._setAll(t,e)},_set:function(t,e,i,n){var s=this.options[t];if(!s)throw new Error("Invalid option: "+t);if(!s.modifiable&&!n)throw new Error("Option cannot be modified: "+t);return w._set(s,e,i)},_setAll:function(t,e,i){if(!t)return!1;var n,s=!1;for(n in t)k.hasOwn(t,n)&&this._set(n,t[n],e,i)&&(s=!0);return s}},{_createAccessor:function(t,e,i){var n={get:function(){return w._get(t,e)}};t.modifiable&&(n.set=function(n){w._set(t,n,e)&&i(n,t)}),Object.defineProperty(e,t.name,n)},_get:function(t,e){return e["_"+t.name]},_set:function(t,e,i){var n="_"+t.name,s=i[n],r=t.transform(null!=e?e:t.defaultValue);return i[n]=r,r!==s}}),M=w,b=h.extend(function(){this._services={}},{getService:function(t){var e=this._services[t];if(!e)throw new Error("Service is not being managed with name: "+t);return e},setService:function(t,e){if(this._services[t])throw new Error("Service is already managed with name: "+t);e&&(this._services[t]=e)}}),B=new M([new g("background",!0,"white"),new g("backgroundAlpha",!0,1,k.abs),new g("element"),new g("foreground",!0,"black"),new g("foregroundAlpha",!0,1,k.abs),new g("level",!0,"L",k.toUpperCase),new g("mime",!0,"image/png"),new g("padding",!0,null,k.abs),new g("size",!0,100,k.abs),new g("value",!0,"")]),y=new b,O=h.extend(function(t){B.init(t,this,this.update.bind(this));var e=B.get("element",this),i=y.getService("element"),n=e&&i.isCanvas(e)?e:i.createCanvas(),s=e&&i.isImage(e)?e:i.createImage();this._canvasRenderer=new c(this,n,!0),this._imageRenderer=new m(this,s,s===e),this.update()},{get:function(){return B.getAll(this)},set:function(t){B.setAll(t,this)&&this.update()},toDataURL:function(t){return this.canvas.toDataURL(t||this.mime)},update:function(){var t=new p({level:this.level,value:this.value});this._canvasRenderer.render(t),this._imageRenderer.render(t)}},{use:function(t){y.setService(t.getName(),t)}});Object.defineProperties(O.prototype,{canvas:{get:function(){return this._canvasRenderer.getElement()}},image:{get:function(){return this._imageRenderer.getElement()}}});var A=O,L=h.extend({getName:function(){}}).extend({createCanvas:function(){},createImage:function(){},getName:function(){return"element"},isCanvas:function(t){},isImage:function(t){}}).extend({createCanvas:function(){return document.createElement("canvas")},createImage:function(){return document.createElement("img")},isCanvas:function(t){return t instanceof HTMLCanvasElement},isImage:function(t){return t instanceof HTMLImageElement}});return A.use(new L),A}); // Based on https://github.com/LinusU/base32-encode/blob/master/index.js function hex_to_b32(hex) { let alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ234567"; let bytes = []; for (let i = 0; i < hex.length; i += 2) { bytes.push(parseInt(hex.substr(i, 2), 16)); } let bits = 0; let value = 0; let output = ''; for (let i = 0; i < bytes.length; i++) { value = (value << 8) | bytes[i]; bits += 8; while (bits >= 5) { output += alphabet[(value >>> (bits - 5)) & 31]; bits -= 5; } } if (bits > 0) { output += alphabet[(value << (5 - bits)) & 31]; } return output; } // Based on https://github.com/adriancooney/console.image function console_image(url, size) { console.log("%c+", "font-size: 1px; padding: " + Math.floor(size / 2) + "px " + Math.floor(size / 2) + "px; line-height: " + size + "px; background: url(" + url + "); color: transparent;"); } (function(console) { console.save = function(data, filename) { if (!data) { console.error('Console.save: No data'); return; } if (typeof data === "object") { data = JSON.stringify(data, undefined, 4) } var blob = new Blob([data], {type: 'text/json'}), e = document.createEvent('MouseEvents'), a = document.createElement('a'); a.download = filename; a.href = window.URL.createObjectURL(blob); a.dataset.downloadurl = ['text/json', a.download, a.href].join(':'); e.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null); a.dispatchEvent(e); } })(console); console.warn("Here's your Authy tokens:"); var data = appManager.getModel().map(function(i) { var secretSeed = i.secretSeed; if (typeof secretSeed == 'undefined') { secretSeed = i.encryptedSeed; } var secret = (i.markedForDeletion === false ? i.decryptedSeed : hex_to_b32(secretSeed)); var period = (i.digits === 7 ? 10 : 30); var totp_uri = `otpauth://totp/${encodeURIComponent(i.name)}?secret=${secret}&digits=${i.digits}&period=${period}`; console.group(i.name); console.log('TOTP secret:', secret); console.log('TOTP URI:', totp_uri); var qr_size = 250; var url = (new QRious({value: totp_uri, size: qr_size})).toDataURL(); console_image(url, qr_size); console.groupEnd(); return {name: i.name, secret: secret, uri: totp_uri}; }); //console.save(data, 'authy_backup.json');