My Workstation Environments

by
calendar-alt June 07, 2018 clock 16 minutes music Fold Zandura - La Futara share-square Share this: twitter linkedin-in facebook hacker-news envelope

Preface

I bounce between a number of systems for different purposes, and flirt with other OS’ than my mainstay macOS from time to time. In the interest of better recalling for myself and perhaps helping others, here’s the core configurations used when I build my macOS High Sierra and later, Windows 10 1803+, and Ubuntu 18.04+ systems.

To the extent possible, I’ve made each section independent, except that several sections assume the core tools have been installed for the respective platform. This should allow an ogler to skip around and pick bits they might like to harvest. By all means, have at it (within the liberal terms of this site’s license).

Core Tools

These are tools which I use to build or install other tools, or are essential workflow elements across my system.

macOS Core Tools

sudo xcodebuild -license accept
xcode-select --install
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
brew tap homebrew/cask-versions
brew install wget rpl mas node

Windows Core Tools

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux

iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
choco feature enable -n allowglobalconfirmation

cinst 7zip putty wget nodejs

Ubuntu Core Tools

sudo apt install -y build-essential curl rpl expect vim libcanberra-gtk-module npm

Utilities

These are applications and tools I frequently use. They differ from “Core Tools” in that they are used directly, not necessarily to enable some other process.

macOS Utilities

brew cask install discord battle-net obs font-hack keepassxc firefox sublime-text steam
open /usr/local/Caskroom/battle-net/latest/Battle.net-Setup.app
mas install 409183694 691956219 891953906 405399194 1142578753 409789998 937984704 823766827 407963104 883878097 682658836 1289197285 409203825 497799835 409201541 415739978 408981434 867299399 949724400 803453959 634148309 420212497 715768417 568494494

The mas App Store References are as follows:

409183694 Keynote (8.0.1)
691956219 Octagon (3.2)
891953906 Buffer (1.2)
405399194 Kindle (1.23.3)
1142578753 OmniGraffle (7.7.1)
409789998 Twitter (4.3.2)
937984704 Amphetamine (3.0.2)
823766827 OneDrive (18.065.0329)
407963104 Pixelmator (3.7)
883878097 Server (5.6.1)
682658836 GarageBand (10.2.0)
1289197285 MindNode (5.0.11)
409203825 Numbers (5.0.1)
497799835 Xcode (9.4)
409201541 Pages (7.0.1)
415739978 The Secret of Monkey Island Special Edition (1.0.2)
408981434 iMovie (10.1.9)
867299399 OmniFocus (2.12.2)
949724400 MoneyWiz 2 (2.7.6)
803453959 Slack (3.1.1)
634148309 Logic Pro X (10.4.1)
420212497 Byword (2.8.2)
715768417 Microsoft Remote Desktop (8.0.27325)
568494494 Pocket (1.7.8)

macOS Loose Packages

Thanks to this thread on Ask Different about CLI options for installing DMGs for the help!

sudo hdiutil mount ~/Packages/Volumes/VMware\ Horizon\ Client/
sudo cp -R /Volumes/VMware\ Horizon\ Client/VMware\ Horizon\ Client.app /Applications/
sudo hdiutil unmount /Volumes/VMware\ Horizon\ Client/

sudo hdiutil mount ~/Packages/Cisco_WebEx_Add-On.dmg
open /Volumes/Install\ Cisco\ WebEx\ Add-On/Cisco\ WebEx\ Add-On.app
sudo hdiutil unmount ~/Packages/Cisco_WebEx_Add-On.dmg

open ~/Packages/Install\ Spotify.app

sudo installer -package ~/Packages/ZoomInstaller.pkg -target /

Windows Utilities

cinst cpu-z discord dropbox gimp gpu-z obs slack sysinternals transmission uplay visualstudiocode windirstat steam
cinst icloud
cinst itunes
cinst origin battle.net --ignorechecksum

Ubuntu Utilities

sudo apt install -y fonts-hack-ttf gnome-shell-extension-system-monitor steam steamcmd steam-devices

sudo add-apt-repository -y ppa:phoerious/keepassxc
sudo apt update
sudo apt install -y keepassxc
sudo snap install spotify discord
sudo snap install slack --classic

sudo add-apt-repository -y ppa:alexlarsson/flatpak
sudo apt update
sudo apt install -y flatpak gnome-software-plugin-flatpack
sudo flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo

flatpak install -y https://flathub.org/repo/appstream/org.gimp.GIMP.flatpakref

Ubuntu Loose Packages

Warning

The below is dangerous! It installs ANYTHING ending in .deb in this directory, so make sure you know what’s in there…

I’ve a few packages that aren’t in repos, snap, flatpak, and so on. This just blindly installs them all. So yes, dangerous.

ls ~/Packages
sudo apt install -fy ~/Packages/*.deb
sudo apt update
sudo apt upgrade

GPG

I use GPG for a number of purposes, primarily signing Git commits.

GPG macOS

Thanks to this Unix StackExchange answer on how to import GPG keys. Set $GPGKEY_TRUSTED as desired the key ID, which you can find in the output of gpg --list-keys:

brew install gpg
gpg --import gpgkey.asc
gpg --list-keys
expect -c "spawn gpg --edit-key $GPGKEY_TRUSTED trust quit; send \"5\ry\r\"; expect eof"
rm gpgkey.asc

GPG Windows

cinst gpg4win
gpg --import gpgkey.asc
rm gpgkey.asc

GPG Ubuntu

Thanks to this Unix StackExchange answer on how to import GPG keys. Set $GPGKEY_TRUSTED as desired the key ID, which you can find in the output of gpg --list-keys:

gpg --import gpgkey.asc
gpg --list-keys
expect -c "spawn gpg --edit-key $GPGKEY_TRUSTED trust quit; send \"5\ry\r\"; expect eof"
rm gpgkey.asc

Git

Git macOS

brew install git-lfs
git lfs install
git config --global core.autocrlf input
git config --global core.editor vim
git config --global gpg.program "/usr/local/bin/gpg"
git config --global credential.helper osxkeychain
git config --global user.signingkey $GPGKEY_TRUSTED # find the right value from the output of gpg --list-keys

Add the GPG context to shell sessions:

printf "export GPG_TTY=$(tty)\n" >> ~/.bash_profile

Or, if using Oh My Zsh!:

printf "export GPG_TTY=$(tty)\n" >> ~/.oh-my-zsh/custom/ssh.zsh

Git Windows

cinst git git-lfs
git config --global core.autocrlf true
git config --global gpg.program "C:\Program Files (x86)\GnuPG\bin\gpg.exe"

Git Ubuntu

sudo apt install -y git git-doc git-gui git-lfs
git config --global core.autocrlf input
git config --global core.editor vim

Thanks to this StackOverflow answer on using libsecret to cache Git credentials

sudo apt install -y libsecret-1-0 libsecret-1-dev
cd /usr/share/doc/git/contrib/credential/libsecret
sudo make
git config --global credential.helper /usr/share/doc/git/contrib/credential/libsecret/git-credential-libsecret

Git Universal

git config --global commit.gpgsign true
git config --global user.name "Ron Scott-Adams"
git config --global user.email "ron@tohuw.net"

Add the following to ~/.gitignore

.DS_Store
.vscode/
*.pid
__pycache__/
node_modules/
*.pyc

Then, set that as the “global gitignore”:

git config --global core.excludesfile ~/.gitignore

Set up the tohuwnet blog:

mkdir ~/Projects
git clone --recurse-submodules https://gitlab.com/tohuw/tohuwnet.git ~/Projects/tohuwnet
cd ~/Projects/tohuwnet/content
git checkout master
cd ~/Projects/tohuwnet/themes/anew
git checkout master
cd

Python

Python macOS

brew install pyenv
pyenv init

Add initialization and key preferences to the shell environment:

printf "if command -v pyenv 1>/dev/null 2>&1; then
  eval \"\$(pyenv init -)\"
fi" >> ~/.bash_profile

printf "export PYENV_VIRTUALENVWRAPPER_PREFER_PYVENV=\"true\"\n" >> ~/.bash_profile

printf "pyenv virtualenvwrapper\n" >> ~/.bash_profile

If using Oh My Zsh!, then instead of the above changes to `.bash_profile`, the following will add to `~/.oh-my-zsh/custom/pyenv.zsh`
:::zsh
printf "if command -v pyenv 1>/dev/null 2>&1; then
  eval \"\$(pyenv init -)\"
fi

export PYENV_VIRTUALENVWRAPPER_PREFER_PYVENV=\"true\"

pyenv virtualenvwrapper\n" >> ~/.oh-my-zsh/custom/pyenv.zsh

Python Windows

cinst python
python -m pip install upgrade pip
pip install awscli virtualenv

Python Ubuntu

sudo apt install -y python-pip python3-dev python3-pip virtualenvwrapper

export WORKON_HOME=~/.envs
export PROJECT_HOME=~/Projects
mkdir ~/.envs
echo "[ \"$VIRTUAL_ENV\" ] && deactivate" >> ~/.bash_logout # or ~/.zlogout
source /etc/bash_completion.d/virtualenvwrapper
mkproject -f tohuwnet

ZSH

I wasn’t convinced mucking about with another shell than good old Bash was worth it until I gave ZSH + Oh My ZSH! a serious try. It’s magnificent for a number of reasons.

ZSH macOS

sh -c "$(curl -fsSL https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"
git clone https://github.com/bhilburn/powerlevel9k.git ~/.oh-my-zsh/custom/themes/powerlevel9k
git clone https://github.com/gabrielelana/awesome-terminal-fonts.git ~/Projects/awesome-terminal-fonts

Configure Awesome Terminal Fonts as per their wiki article for macOS

open ~/Projects/awesome-terminal-fonts/*.ttf
sudo reboot

Upon reboot, hold down the CMD and R keys, then go to Utilities -> Terminal and run:

csrutil disable
reboot

On this reboot, boot as normal, then:

cp /System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Resources/DefaultFontFallbacks.plist ~/Desktop
open -a Xcode.app ~/Desktop/DefaultFontFallbacks.plist

As per their instructions:

In the plist editor, expand “monospace” then click the + icon to add a new row and type in Pomodoro. Do this three more times for FontAwesome, Octicons, and Icomoon until the plist looks like:

Adding new monospace fonts to the plist file

Then:

cp /System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Resources/DefaultFontFallbacks.plist ~/DefaultFontFallbacks.plist.bak

Close XCode then:

sudo mv ~/Desktop/DefaultFontFallbacks.plist /System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreText.framework/Resources/DefaultFontFallbacks.plist

Reboot into Recovery Mode again with the CMD and R keys held during a startup and go back to Utilities -> Terminal. Then:

csrutil enable
reboot

Then during a normal session:

cp ~/Projects/awesome-terminal-fonts/build/*.sh ~/.fonts/

Source the files into shell sessions:

printf "source ~/.fonts/*.sh\n" >> ~/.bash_profile

Or to source for Zsh:

printf "source ~/.fonts/*.sh\n" >> ~/.zshrc # This line may need to be above the theme specification

.zshrc macOS

export PATH=$PATH:$HOME/.local/bin
export ZSH=$HOME/.oh-my-zsh

DEFAULT_USER=$USER

source ~/.fonts/*.sh
POWERLEVEL9K_MODE="awesome-fontconfig"
ZSH_THEME="powerlevel9k/powerlevel9k"
#POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(context time battery dir vcs virtualenv)
#POWERLEVEL9K_ALWAYS_SHOW_CONTEXT=true
POWERLEVEL9K_SHORTEN_STRATEGY="truncate_with_package_name"
# List available colors for prompts with `spectrum_ls`

export WORKON_HOME=~/.envs
export PROJECT_HOME=~/Projects

plugins=(
  git aws command-not-found docker history thefuck
)

source $ZSH/oh-my-zsh.sh

The following config files live in ~/.oh-my-zsh/custom/:

alias.zsh macOS

alias tc="termius connect"
alias psg="ps aux | grep -v grep | grep -i -e VSZ -e"
alias wget="wget -c"
alias blog="workon tohuwnet; git fetch; git status"
alias gs="git status"
alias gulp="npm run gulp"

calc.zsh macOS

Thanks to dogbane on Unix StackExchange for providing this simple calc function:

calc () {
    bc -l <<< "$@"
}

aws.zsh macOS

AWS_DEFAULT_PROFILE=tohuwnet

ssh.zsh macOS

KEYFILES=`find ~/.ssh -maxdepth 1 -type f ! \( -name '*.pub' -o -name '.*' -o -name '*_keys' \)`

for keyfile in $KEYFILES; do
    ssh-add $keyfile 2> /dev/null
done

ZSH Ubuntu

sudo apt install -y zsh zsh-doc
sh -c "$(curl -fsSL https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"
git clone https://github.com/bhilburn/powerlevel9k.git ~/.oh-my-zsh/custom/themes/powerlevel9k
git clone https://github.com/gabrielelana/awesome-terminal-fonts.git ~/Projects/awesome-terminal-fonts
~/Projects/awesome-terminal-fonts/install.sh
rpl PragmataPro Hack ~/.config/fontconfig/conf.d/10-symbols.conf
fc-cache -fv ~/.fonts

.zshrc Ubuntu

export PATH=$PATH:$HOME/.local/bin
export ZSH=/home/tohuw/.oh-my-zsh

DEFAULT_USER="tohuw"

source ~/.fonts/*.sh
POWERLEVEL9K_MODE="awesome-fontconfig"
ZSH_THEME="powerlevel9k/powerlevel9k"
#POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(context time battery dir vcs virtualenv)
#POWERLEVEL9K_ALWAYS_SHOW_CONTEXT=true
POWERLEVEL9K_SHORTEN_STRATEGY="truncate_with_package_name"
# List available colors for prompts with `spectrum_ls`

export WORKON_HOME=~/.envs
export PROJECT_HOME=~/Projects

plugins=(
  git aws command-not-found docker history virtualenvwrapper thefuck
)

source $ZSH/oh-my-zsh.sh

The following config files live in ~/.oh-my-zsh/custom/:

alias.zsh Ubuntu

alias tc="termius connect"
alias psg="ps aux | grep -v grep | grep -i -e VSZ -e"
alias wget="wget -c"
alias blog="cd ~/Projects/tohuwnet; git fetch; git status"
alias gs="git status"
alias music="playerctl"
alias play="playerctl play"
alias pause="playerctl pause"
alias previous="playerctl previous"
alias next="playerctl next"
#alias np="echo `playerctl metadata artist` - `playerctl metadata title` \(`playerctl metadata album`\)"

calc.zsh Ubuntu

Thanks to dogbane on Unix StackExchange for providing this simple calc function:

calc () {
    bc -l <<< "$@"
}

aws.zsh Ubuntu

AWS_DEFAULT_PROFILE=tohuwnet

ssh.zsh Ubuntu

KEYFILES=`find ~/.ssh -maxdepth 1 -type f ! \( -name '*.pub' -o -name '.*' -o -name '*_keys' \)`

for keyfile in $KEYFILES; do
    ssh-add $keyfile 2> /dev/null
done

The Fuck

Obscene name, useful tool. In short, it corrects accidentally typed commands. You can read more about it on The Fuck’s project page

The Fuck macOS and Ubuntu

sudo -H pip3 install thefuck
eval "$(thefuck --alias oops)"

Initialize it:

printf "eval \"\$(thefuck --alias oops)\"\n" >> .bash_profile

Or for Oh My ZSH:

printf "eval \"\$(thefuck --alias oops)\"\n" > ~/.oh-my-zsh/custom/thefuck.zsh

Tilix

Tilix Ubuntu

sudo apt install -y tilix gnome-shell-extension-tilix-dropdown

sudo ln -s /etc/profile.d/vte-2.91.sh /etc/profile.d/vte.sh
echo "if [ $TILIX_ID ] || [ $VTE_VERSION ]; then\n    source /etc/profile.d/vte.sh\nfi" > ~/.oh-my-zsh/custom/vte.zsh

Tilix Keyboard Shortcut Script

tilix -q

PowerShell

PowerShell macOS

brew cask install powershell
pwsh

Then, in the PowerShell session:

Install-Module awspowershell
Install-Module vmware.powercli

PowerShell Windows

Set-ExecutionPolicy RemoteSigned
Install-Module awspowershell
Install-Module vmware.powercli

PowerShell Profile

# I don't use global gulp, ever. Make it part of your node project and run it there in case you need differing versions of gulp!
function gulp($opts) {
    npm run gulp $opts
}

# A QAD to start working on my blog

function blog() {
    Set-Location $env:userprofile\Projects\Envs\blog\Scripts
    .\activate

    Set-Location $env:userprofile\Projects\tohuwnet
    git fetch
    git status
}

# Remove these useless aliases: https://github.com/PowerShell/PowerShell/pull/1901#issuecomment-240847078
Remove-Item Alias:wget
Remove-Item Alias:curl

PowerShell Ubuntu

PowerShell is a pain on Ubuntu lately, because there’s not a version yet compatible with 18.04. This patches the latest released version to work with 18.04.

Download the libicu57 dependancy:

wget http://security.ubuntu.com/ubuntu/pool/main/i/icu/libicu57_57.1-6ubuntu0.3_amd64.deb -O /tmp/libicu.deb

Download the Debian package powershell_6.0.1-1.ubuntu.17.04_amd64.deb from the releases page onto the Ubuntu machine:

wget https://github.com/PowerShell/PowerShell/releases/download/v6.0.1/powershell_6.0.1-1.ubuntu.17.04_amd64.deb -O /tmp/pwsh.deb

Extract the PowerShell package and change the dependencies to libcurl4:

dpkg-deb -R /tmp/pwsh.deb /tmp/pwsh-patched
rpl libcurl3 libcurl4 /tmp/pwsh-patched/DEBIAN/control

Re-Package the patched package:

dpkg-deb -b /tmp/pwsh-patched /tmp/pwsh-patched.deb

Install both packages in this order:

sudo apt install -fy /tmp/libicu.deb /tmp/pwsh-patched.deb

Cleanup:

rm -rf /tmp/libicu.deb /tmp/pwsh.deb /tmp/pwsh-patched.deb /tmp/pwsh-patched

VMware Fusion/Workstation

macOS VMware Fusion

sudo hdiutil mount ~/Packages/VMware-Fusion.dmg
open /Volumes/VMware\ Fusion/VMware\ Fusion.app

After install:

sudo hdiutil unmount /Volumes/VMware\ Fusion

Ubuntu VMware Workstation

sudo chmod +x ~/Packages/VMware-Workstation-Full-14.1.1-7528167.x86_64.bundle
sudo ~/Packages/VMware-Workstation-Full-14.1.1-7528167.x86_64.bundle

To mount shared folders in a Linux guest, see the VMware Workstation on Linux Documentation. Here’s a quick example of mounting all shared folders:

Note

The below is run in the guest, not the host.

:::bash sudo mkdir /mnt/hostshares sudo rpl “#user_allow_other” “user_allow_other” /etc/fuse.conf /usr/bin/vmhgfs-fuse .host:/ /mnt/hostshares -o subtype=vmhgfs-fuse,allow_other

Firefox Nightly

Firefox Nightly macOS

brew cask install firefox-nightly

To move the close button on tabs to the left, add the following to userChrome.css:

@namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");
.tabbrowser-tab .tab-throbber,
.tabbrowser-tab .tab-icon-image,
.tabbrowser-tab .tab-sharing-icon-overlay,
.tabbrowser-tab .tab-icon-overlay,
.tabbrowser-tab .tab-label-container,
.tabbrowser-tab .tab-icon-sound {
  -moz-box-ordinal-group: 2 !important;
}
.tabbrowser-tab .tab-close-button {
  margin-left: -2px !important;
  margin-right: 2px !important;
}

Firefox Nightly Ubuntu

Thanks to this StackOverflow answer on scripting Firefox downloads

wget --content-disposition "https://download.mozilla.org/?product=firefox-nightly-latest&os=linux64&lang=en-US" -O /tmp/firefox.bz2
tar -jxf /tmp/firefox.bz2 -C /tmp/
sudo mkdir /opt/firefox-nightly
sudo mv /tmp/firefox/* /opt/firefox-nightly/
sudo addgroup ffdev
sudo adduser $USER ffdev
sudo chgrp -R ffdev /opt/firefox-nightly
sudo chmod -R g+w /opt/firefox-nightly

Create a desktop entry for Firefox Nightly by adding the following to /usr/share/applications/firefox-nightly.desktop:

[Desktop Entry]
Version=1.0
Name=Firefox Nightly
GenericName=Web Browser
Comment=Browse the Web
Exec=env MOZ_ALLOW_GTK_DARK_THEME=true /opt/firefox-nightly/firefox %u
Icon=/opt/firefox-nightly/browser/chrome/icons/default/default128.png
Terminal=false
Type=Application
MimeType=text/html;text/xml;application/xhtml+xml;application/xml;application/vnd.mozilla.xul+xml;application/rss+xml;application/rdf+xml;image/gif;image/jpeg;image/png;x-scheme-handler/http;x-scheme-handler/https;
StartupNotify=true
StartupWMClass=Firefox Nightly
Categories=Network;WebBrowser;
Keywords=web;browser;internet;
Actions=new-window;new-private-window;

[Desktop Action new-window]
Name=New Window
Exec=env MOZ_ALLOW_GTK_DARK_THEME=true /opt/firefox-nightly/firefox --new-window %u

[Desktop Action new-private-window]
Name=New Private Window
Exec=env MOZ_ALLOW_GTK_DARK_THEME=true /opt/firefox-nightly/firefox --private-window %u

To move the close button over to the left in CSD mode (title bar turned off), add the following to $YOUR_FF_PROFILE/chrome/userChrome.css (thanks to this Ask Ubuntu question on CSD window buttons):

@namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");

#titlebar-max {
  -moz-box-ordinal-group: 0;
}

#titlebar-content {
  direction: rtl;
}

And to move the close button on the tabs to the left:

:::css
.tabbrowser-tab .tab-throbber,
.tabbrowser-tab .tab-icon-image,
.tabbrowser-tab .tab-sharing-icon-overlay,
.tabbrowser-tab .tab-icon-overlay,
.tabbrowser-tab .tab-label-container,
.tabbrowser-tab .tab-icon-sound {
  -moz-box-ordinal-group: 2 !important;
}
.tabbrowser-tab .tab-close-button {
  margin-left: -2px !important;
  margin-right: 2px !important;
}

Ublock Origin

I use Ublock Origin in all my browsers. The amount of tracking crap in websites these days is ridiculous, invasive, and slows down many sites. Specifically, I use “Hard Mode” (see below) which puts more configuration onus on me, but I like the outcomes. There’s more intuitive software out there with similar functions, but none quite so powerful.

Ublock Origin macOS

Disable hyperlink pings, as per This Ublock Wiki article on hyperlink beacons in Safari

defaults write com.apple.Safari com.apple.Safari.ContentPageGroupIdentifier.WebKit2HyperlinkAuditingEnabled -bool false

Ublock Origin Universal

Enable “I am an advanced user” under “Settings”

Allow the privacy-respecting analytics tracker “Matomo” (formerly “Piwik”) by adding the following to “My filters” (Thanks to this SuperUser post about allowing Piwik in Ublock Origin)

@@/piwik.php
@@/piwik.js

Enable “Hard Mode” as per the Ublock Wiki article on Hard Mode by adding the following to “My rules”

* * 3p block
* * 3p-script block
* * 3p-frame block

My custom rules are exported to a file as often as I remember to do so. I find the cloud storage feature built in is a neat idea, but kind of useless because it doesn’t even translate across different editions/platforms for Firefox, let alone work in Safari at all or across browsers.

Gnome Extensions on Ubuntu

sudo apt install -y chrome-gnome-shell

todo.sh

I’m still working on putting this to use, but I love the concept of open formats that can be easily implemented on many platforms.

todo.sh macOS

brew install todo-txt
mkdir -p ~/.todo/actions.d

Place the following in ~/.todo/config

export TODO_DIR="$HOME/Documents/ToDo"

export TODO_FILE="$TODO_DIR/todo.txt"
export DONE_FILE="$TODO_DIR/done.txt"
export REPORT_FILE="$TODO_DIR/report.txt"

export TODO_ACTIONS_DIR="$HOME/.todo/actions.d"

todo.sh Ubuntu

git clone https://github.com/todotxt/todo.txt-cli.git ~/Projects/todo.txt-cli
cd ~/Projects/todo.txt-cli
make
sudo make install
make test

mkdir -p ~/.todo/actions.d

Place the following in ~/.todo/config

export TODO_DIR="/home/$USER/Documents/ToDo"

export TODO_FILE="$TODO_DIR/todo.txt"
export DONE_FILE="$TODO_DIR/done.txt"
export REPORT_FILE="$TODO_DIR/report.txt"

export TODO_ACTIONS_DIR="$HOME/.todo/actions.d"

todo.zsh

export TODO_DIR="$HOME/Documents/ToDo"
export TODO_FILE="$TODO_DIR/todo.txt"
export DONE_FILE="$TODO_DIR/done.txt"
export REPORT_FILE="$TODO_DIR/report.txt"

Termius

I actually don’t use the Termius UI much on my workstations, but it’s a fantastic iOS app. I do use the CLI, because I want one synchronized home for all my hosts I regularly connect to.

Termius macOS

brew install termius # Termius CLI
mas install 1176074088 # Termius GUI
termius init
terimus pull
termius key -i ~/.ssh/$USER@`hostname` -L `hostname`
termius identity -u $USER -k `hostname` -L $USER
termius host --identity $USER gilead
termius host --identity $USER ur
termius host --identity $USER canaan

Termius Ubuntu

sudo snap install termius-app
curl -sSL https://raw.githubusercontent.com/Crystalnix/termius-cli/master/bootstrap.sh | bash
pip install -U termius
termius init
terimus pull
termius key -i ~/.ssh/$USER@`hostname` -L `hostname`
termius identity -u $USER -k `hostname` -L $USER
termius host --identity $USER gilead

AWS CLI

AWS CLI macOS

brew install awscli

AWS CLI Windows

cinst awscli

AWS CLI Ubuntu

sudo apt install -y awscli

AWS CLI Universal

aws configure --profile tohuwnet
aws configure

NextCloud

NextCloud macOS

brew cask install nextcloud

NextCloud Ubuntu

sudo add-apt-repository -y ppa:nextcloud-devs/client
sudo apt update
sudo apt install -y nextcloud-client nextcloud-client-nautilus

Note

You need to restart Nautilus for the NextCloud integration to take effect.

Desktop Environment Customizations

Windows DE

I haven’t automated this quite yet due to the complexity of targeting the right device, but I like to reverse the direction of the scroll wheel in Windows.

Ubuntu DE

gsettings set org.gnome.desktop.wm.preferences button-layout 'close:'
gsettings set org.gnome.shell.extensions.dash-to-dock click-action 'minimize'
gsettings set org.gnome.desktop.interface monospace-font-name 'Hack 11'

sudo apt install -y gnome-tweaks dconf-editor

#sudo chown -R $USER /usr/share/backgrounds
#sudo chmod -R g+w /usr/share/backgrounds
sudo add-apt-repository -y ppa:peterlevi/ppa
sudo apt update
sudo apt install -y variety-slideshow variety

Gnome Shell Extensions in Use

Apt Update Indicator by franglais125
Update indicator for Apt based distributions.
Auto Move Windows by fmuellner
Move applications to specific workspaces when they create windows.
Caffeine by eon
Disable the screensaver and auto suspend
Center Area Horizontal Spacing by kirby_33
Reduce the horizontal spacing between icons in the top-center icon area.
Clipboard Indicator by Tudmotu
Clipboard Manager extension for Gnome-Shell - Adds a clipboard indicator to the top panel, and caches clipboard history.
Coverflow Alt-Tab by p91paul
Replacement of Alt-Tab, iterates through windows in a cover-flow manner.
Disable Workspace Switcher Popup by windsor.schmidt
Disables the overlay displayed when switching between workspaces.
Extension Update Notifier by franglais125
Shows a notification when extension updates are available.
Extensions by petres
Enable/disable easily gnome shell extensions from a menu in the top panel. Also allows to edit the settings of the extensions. Feedback welcome!
Icon Area Horizontal Spacing by kirby_33
Reduce the horizontal spacing between icons in the top-left icon area.
Media Player Indicator by JasonLG1979
Control MPRIS Version 2 Capable Media Players.
OpenWeather by jens
Weather extension to display weather information from openweathermap.org or darksky.net for almost all locations in the world.
Panel OSD by jens
Configuring where on the (main) screen notifications will appear, instead of just above the message tray
Refresh Wifi Connections by kgshank
This extension adds a refresh button to the Wifi connection selection dialog to request for a network scan manually.
Remove Dropdown Arrows by mpdeimos
Removes the dropdown arrows which were introduced in Gnome 3.10 from the App Menu, System Menu, Input Menu, Access Menu, Places Menu, Applications Menu and any other extension that wants to add dropdown arrows.
Status Area Horizontal Spacing by p91paul
Reduce the horizontal spacing between icons in the top-right status area
system-monitor by cerin
Display system informations in gnome shell status bar, such as memory usage, cpu usage, network rates…
Todo.txt by BartL
A Gnome shell interface for todo.txt.
Ubuntu AppIndicators (System extension)
Support app indicators in top panel, as the default Ubuntu experience. System update of KStatusNotifierItem/AppIndicator extension.
Ubuntu Dock (System extension)
A dock for the Gnome Shell, default Ubuntu experience. This extension is a modified version of Dash To Dock with different defaults. Dash To Dock can be installed to replace it and give more (but unsupported) configuration options.
User Themes by fmuellner
Load shell themes from user directory.

Fix Media Player Extension

The Media Player Indiciator Gnome Shell extension has an ugly off-center probem in its popup. Thanks to IBBBoard on GitHub working on this same issue with Media Player Indicator’s padding, this hack fixes it well enough:

echo "\n.aggregate-menu .popup-sub-menu > * > * > :first-child,\n.aggregate-menu .popup-sub-menu > * > * > :last-child > :first-child,\n.aggregate-menu .popup-sub-menu > * > * > :last-child > :first-child > :first-child {\n    margin: 0; padding: 0;\n}" >> .local/share/gnome-shell/extensions/mediaplayer@patapon.info/stylesheet.css
Updated: June 09, 2018 (Fix the TOC and some syntax. See the underlying issue that broke my TOC if you're into the nerdy stuff: https://gitlab.com/tohuw/tohuwnet/issues/1)

Comments

Engage, converse, argue, reason. Disagreement is welcomed, personal attacks are not.