From 358584a4770e58554edf25220f66ff2208e3e930 Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Sat, 7 Jan 2017 21:00:53 +0100 Subject: [PATCH 001/214] Use RawGit CDN production URL for logo banner SVG --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 011076a..45b30dc 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -

+

From 98c2b6a4da75b8ade64efe156e3f27093cd3b301 Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Sat, 7 Jan 2017 21:14:02 +0100 Subject: [PATCH 002/214] GHI-#1 Implement the bootstrap script --- bootstrap | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100755 bootstrap diff --git a/bootstrap b/bootstrap new file mode 100755 index 0000000..8863a3d --- /dev/null +++ b/bootstrap @@ -0,0 +1,18 @@ +#!/usr/bin/env bash +# +++++++++++++++++++++++++++++++++++++++++++++++++++++ +# title Igloo Bootstrap + +# project igloo + +# repository https://github.com/arcticicestudio/igloo + +# author Arctic Ice Studio + +# email development@arcticicestudio.com + +# copyright Copyright (C) 2017 + +# +++++++++++++++++++++++++++++++++++++++++++++++++++++ +set -e + +SNOWSAW_DIR=".snowsaw" +SNOWSAW_BIN="bin/snowsaw" + +SNOWBLOCKS_BASE_DIR_NAME="snowblocks" +SNOWBLOCKSDIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/$SNOWBLOCKS_BASE_DIR_NAME" + +"${SNOWSAW_DIR}/${SNOWSAW_BIN}" -s "${SNOWBLOCKSDIR}" "${@}" From 010f4789a09c245c320ebd67242834aecb0d8e44 Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Sun, 8 Jan 2017 11:39:16 +0100 Subject: [PATCH 003/214] GHI-#1 Implement Git configuration and ignore pattern --- snowblocks/git/git-commit-msg | 39 +++ snowblocks/git/gitconfig | 453 ++++++++++++++++++++++++++++++++++ snowblocks/git/gitignore | 61 +++++ 3 files changed, 553 insertions(+) create mode 100755 snowblocks/git/git-commit-msg create mode 100755 snowblocks/git/gitconfig create mode 100755 snowblocks/git/gitignore diff --git a/snowblocks/git/git-commit-msg b/snowblocks/git/git-commit-msg new file mode 100755 index 0000000..3b7129b --- /dev/null +++ b/snowblocks/git/git-commit-msg @@ -0,0 +1,39 @@ +# [!][~][](): +# BLANK_LINE +# +# BLANK_LINE +# +# + +# Subject line <= 50 characters +# Summary & Footer block <= 72-character wordwrap +# Separator Line <= 72-character wrapped +# +# ! +# Breaking change marker +# ~ +# Deprecation marker +# +# * bugfix +# * improvement +# * maintain +# * refactor +# * test +# +# * assets +# * cleanup +# * dependencies +# * documentation +# * performance +# * resources +# * security +# * style +# * toolset +# +# Example +# [JIRA-578][bugfix](security): Fix memory leak in "load()" method +# ---------------------------------------------------------------------- +# Arctic Ice Studio "Glacier Git 0.24.0" Git Commit Message Template +# https://github.com/arcticicestudio/glacier-git +# This template is designed for the "gitflow" branching model. +# http://nvie.com/posts/a-successful-git-branching-model diff --git a/snowblocks/git/gitconfig b/snowblocks/git/gitconfig new file mode 100755 index 0000000..de25c9c --- /dev/null +++ b/snowblocks/git/gitconfig @@ -0,0 +1,453 @@ +# ++++++++++++++++++++++++++++++++++++++++++++++++++++++ +# title Git Configuration + +# project igloo + +# repository https://github.com/arcticicestudio/igloo + +# author Arctic Ice Studio + +# email development@arcticicestudio.com + +# copyright Copyright (C) 2017 + +# ++++++++++++++++++++++++++++++++++++++++++++++++++++++ +# +# [References] +# Git +# (https://git-scm.com/docs/git-config) +# (https://git-scm.com/book/tr/v2/Customizing-Git-Git-Configuration#Colors-in-Git) +# diff-so-fancy +# (https://github.com/so-fancy/diff-so-fancy#options) +[include] + # Includes sensible authentication data: + # - user.name + # - user.email + # - user.signingkey + # - user.useconfigonly true + path = ~/.gitconfig_auth + +[core] + repositoryFormatVersion = 0 + filemode = true + bare = false + logallrefupdates = true + whitespace = tab-in-indent + editor = vim + pager = diff-so-fancy | less --tabs=4 -RFX + attributesfile = ~/.gitattributes + excludesfile = ~/.gitignore + autocrlf = input + +[commit] + template = ~/.git-commit-msg + status = false + +[diff] + tool = intellij + compactionHeuristic = true + +[difftool "intellij"] + prompt = true + cmd = idea diff $(cd $(dirname "$LOCAL") && pwd)/$(basename "$LOCAL") $(cd $(dirname "$REMOTE") && pwd)/$(basename "$REMOTE") + +[diff-so-fancy] + markEmptyLines = true + changeHunkIndicators = true + stripLeadingSymbols = true + useUnicodeRuler = true + +[merge] + tool = intellij + ff = false + +[mergetool "intellij"] + keepBackup = false + prompt = false + trustExitCode = true + cmd = idea merge $(cd $(dirname "$LOCAL") && pwd)/$(basename "$LOCAL") $(cd $(dirname "$REMOTE") && pwd)/$(basename "$REMOTE") $(cd $(dirname "$BASE") && pwd)/$(basename "$BASE") $(cd $(dirname "$MERGED") && pwd)/$(basename "$MERGED") + +[push] + default = current + +[advice] + pushNonFastForward = false + statusHints = false + resolveConflict = false + +[status] + showUntrackedFiles = all + +[color] + branch = always + diff = always + grep = always + pager = true + showbranch = always + status = always + ui = always + +[color "branch"] + current = "white blue bold" + local = "white bold" + plain = "white" + remote = "blue bold" + +[color "decorate"] + branch = "blue bold" + HEAD = "white bold ul" + remoteBranch = "blue" + stash = "yellow" + tag = "cyan bold" + +[color "diff"] + commit = "blue bold" + frag = "blue bold" + func = "white" + meta = "cyan" + new = "green" + old = "red" + plain = "white" + whitespace = "white reverse" + +[color "diff-highlight"] + oldNormal = "red bold" + oldHighlight = "white red bold" + newNormal = "green bold" + newHighlight = "white green bold" + +[color "grep"] + context = "white" + filename = "white dim ul" + function = "white" + linenumber = "white dim bold" + match = "blue bold" + selected = "white" + separator = "white dim" + +[color "interactive"] + error = "red bold" + header = "blue bold" + help = "white dim" + prompt = "cyan" + +[color "status"] + added = "green bold" + changed = "yellow bold" + header = "white ul" + nobranch = "magenta bold ul" + unmerged = "blue ul" + untracked = "red bold" + updated = "cyan bold" + +[gui] + commitmsgwidth = 72 + +[alias] +#+----------------------+ +#+ Interaction - Branch + +#+----------------------+ + # Deletes all local branches based on the the specified gitflow branch prefix. + # + # Usage: + # git bclean + bclean = "!f() { git for-each-ref refs/heads/$1/* --format='%(refname)' | while read ref ; do branch=${ref#refs/heads/} ; git branch -d $branch ; done }; f" + + # Checks out into the specified branch. + # Shortended checkout command. + # + # Usage: + # git co + co = checkout + + # Checks out into a new tracking branch using the specified name. + # + # Usage: + # git cob + cob = checkout -t -b + + # GitHub Pull Request Management + # Creates a branch based on the specified GitHub Pull Request ID. + # Default remote "origin" is used unless otherwise stated. + # + # Usage: + # git pr [REMOTE] + # Examples: + # "git pr 4" Creates a local branch "pr/4" from the default "origin" remote + # "git pr 4 remote" Creates a local branch "pr/4" from the specified remote "remote" + pr = "!f() { git fetch -fu ${2:-origin} refs/pull/$1/head:pr/$1 && git checkout pr/$1; }; f" + + # GitHub Pull Request Management + # Deletes all branches based on the specified GitHub Pull Request ID. + # Default remote "origin" is used unless otherwise stated. + # + # Usage: + # git pr-clean + # Examples: + # "git pr-clean" Removes all branches in "pr/*" from the local repository + pr-clean = "!git for-each-ref refs/heads/pr/* --format='%(refname)' | while read ref ; do branch=${ref#refs/heads/} ; git branch -d $branch ; done" + + # +----------------------+ + # + Interaction - Commit + + # +----------------------+ + # Adds all specified files to the stage and prints the status. + # + # Depends on: + # alias.s + # Usage: + # git a + a = ! sh -c 'git add -- "$@" && git s' -- + + # Adds all specified files interactively in patch mode to the stage and prints the status. + # + # Depends on: + # alias.s + # Usage: + # git ap + ap = ! git add -p $@ && git s + + # Adds all unstaged- and untracked files to the stage and prints the status. + # + # Depends on: + # alias.s + # Usage: + # git aa + aa = ! git add . && git s + + # Commits all staged files. + # Shortended commit command. + # + # Usage: + # git c + c = commit + + # +---------------------+ + # + Interaction - Fetch + + # +---------------------+ + # Fetches changes from all remotes and removes any remote-tracking references that no longer exists. + # + # Usage: + # git fa + fa = fetch --all --prune + + # +---------------------+ + # + Interaction - Merge + + # +---------------------+ + # Merges the specified branch in non-fast-forward mode. + # + # Usage: + # git m + m = merge --no-ff + + # +--------------------+ + # + Interaction - Pull + + # +--------------------+ + # Pulls changes from the specified remote in non-fast-forward mode and prunes all unreachable objects from the object + # database. + # + # Usage: + # git pl + pl = ! git pull --no-ff --prune $@ + + # Pulls changes from the specified remote in non-fast-forward mode, performs a rebase and prunes all unreachable + # objects from the object database. + # !WARNING! + # Use rebasing with caution and only for local and unpushed branches! + # History that got rewritten in a shared branch touched by multiple developers may break the repository! + # Rebasing a shared branch that others have based work on may lead to problems by forcing other users to manually + # fix their history. + # + # Usage: + # git plrb + # References: + # https://www.atlassian.com/git/articles/git-team-workflows-merge-or-rebase + plrb = ! git pull --no-ff --rebase --prune $@ + + # Pulls changes from the specified remote in fast-forward mode and prunes all unreachable objects from the object + # database. + # !WARNING! + # Use fast-forward mode with caution to prevent loss of "commit <> branch" tracking information in the history! + # + # Usage: + # git plff + plff = ! git pull --ff-only --prune $@ + + # Pulls changes from the specified remote in fast-forward mode, performs a rebase and prunes all unreachable objects + # from the object database. + # !WARNING! + # Use fast-forward mode with caution to prevent loss of "commit <> branch" tracking information in the history! + # !WARNING! + # Use rebasing with caution and only for local and unpushed branches! + # History that got rewritten in a shared branch touched by multiple developers may break the repository! + # Rebasing a shared branch that others have based work on may lead to problems by forcing other users to manually + # fix their history. + # + # Usage: + # git plffrb + # References: + # https://www.atlassian.com/git/articles/git-team-workflows-merge-or-rebase + plffrb = ! git pull --rebase --ff-only --prune $@ + + # +--------------------+ + # + Interaction - Push + + # +--------------------+ + # Pushes the current branch to the default "origin" remote. + # + # Usage: + # git po + po = push origin + + # +---------------------+ + # + Interaction - Reset + + # +---------------------+ + # Resets to the specific commit. + # Updates the index and does not touch the working tree. + # Shortended reset command. + # + # Usage: + # git back + back = reset + + # Undoes the last commit. + # + # Usage: + # git undo + undo = reset HEAD~1 --mixed + + # Resets the stage. + # + # Usage: + # git unstage + unstage = reset HEAD -- + + # Hardresets to the specific commit. + # Shortended reset command. + # !WARNING! + # Any changes to tracked files in the working tree commited after the specified commit are discarded! + # This will reset the index and the working tree. + # + # Usage: + # git wipe + wipe = reset --hard + + # +----------------------+ + # + Information - Branch + + # +----------------------+ + # Prints all branches with abbreviated SHA1 checksum and commit message. + # + # Usage: + # git b + # Output Format: + # + b = branch --list --all -v + + # Prints only branches that have not been merged yet into the specified branch. + # + # Usage: + # git bum + # Output Format: + # + bum = branch --all --list --verbose --no-merged + + # Prints only branches that have been merged into the specified branch. + # + # Usage: + # git bm + # Output Format: + # + bm = branch --all --list --verbose --merged + + # +-------------------+ + # + Information - Log + + # +-------------------+ + # Lists an advanced commit log. + # + # Usage: + # git l + # Output Format: + # [REFS] + # <> + # + # + l = log --pretty=format:'%C(74 bold ul)%H%C(reset)%C(86 bold)%d\n%C(80)%an %C(248)<%C(80)%ae%C(248)>\n%C(68)%ci\n%C(253)%B' --graph + + # Lists the log for all commits commited after the given tag or SHA1 checksum. + # + # Depends on: + # alias.l + # Usage: + # git lch | + # Output Format: + # [REFS] + # <> + # + # + lch = ! git l $1..HEAD + + # Lists an advanced commit log with relative commit dates. + # + # Usage: + # git lr + # Output Format: + # [REFS] + # <> + # + # + lr = log --pretty=format:'%C(74 bold ul)%H%C(reset)%C(86 bold)%d\n%C(80)%an %C(248)<%C(80)%ae%C(248)>\n%C(68)%cr\n%C(253)%B' --graph + + # Lists all new commits after the fetch including stats, but excluding merges. + # + # Depends on: + # alias.l + # Usage: + # git lnew + # Output Format: + # [REFS] + # <> + # + # + # + lnew = ! git l ORIG_HEAD.. --stat --no-merges + +# +----------------------+ +# + Information - Status + +# +----------------------+ + # Shows the status. + # Shortended status command. + # + # Usage: + # git s + s = status + + # +-------------------+ + # + Information - Tag + + # +-------------------+ + # Lists all tags handled as version strings in sorted order. + # + # Usage: + # git t + t = tag --list --sort=version:refname + + # Creates a signed annotated tag. + # + # Usage: + # git ts + ts = tag --annotate --sign + + # +----------------+ + # + Query - Branch + + # +----------------+ + # Finds all branches containing the given SHA1 checksum. + # + # Depends on: + # alias.b + # Usage: + # git fb + fb = ! sh -c 'git branch --contains $1' -- + + # +-------------+ + # + Query - Tag + + # +-------------+ + # Finds all tags containing the given SHA1 checksum. + # + # Usage: + # git ft + ft = ! git describe --tags --contains $1 + + cc = "!f() { \ + git log --decorate --date=short -S\"$1\"; \ + }; f" diff --git a/snowblocks/git/gitignore b/snowblocks/git/gitignore new file mode 100755 index 0000000..63f404e --- /dev/null +++ b/snowblocks/git/gitignore @@ -0,0 +1,61 @@ +# ++++++++++++++++++++++++++++++++++++++++++++++++++++++ +# title Git Ignore Pattern + +# project igloo + +# repository https://github.com/arcticicestudio/igloo + +# author Arctic Ice Studio + +# email development@arcticicestudio.com + +# copyright Copyright (C) 2017 + +# ++++++++++++++++++++++++++++++++++++++++++++++++++++++ +# +# [References] +# Git +# (https://git-scm.com/docs/gitignore) +# Java +# (http://www.java.com/en/download/help/error_hotspot.xml) + +# +--------------------+ +# + Runtime Extensions + +# +--------------------+ +*.bak +*.log + +# +--- Git ---+ +*.orig + +# +------------------+ +# + Operating System + +# +------------------+ +# +--- Unix ---+ +*~ +*.pid + +# +--- macOS ---+ +._* +.DS_Store +.fseventsd +.Spotlight-V100 +.Trash-* +.Trashes + +# +-----------+ +# + Languages + +# +-----------+ +# +--- Java / JavaFX ---+ +*.bss +*.class +*.jar +hs_err_pid* + +# +--- NodeJS ---+ +.npm +node_modules +npm-debug.log* +*.log + +# +--- Python ---+ +__pycache__ +*.pyc + +# +--- Sass ---+ +.sass-cache/ +*.css.map From 67dedabd1924d39cbe4de700455afa7e2c4fbdd1 Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Sun, 8 Jan 2017 11:40:07 +0100 Subject: [PATCH 004/214] GHI-#1 Add Git ignore pattern for "gitconfig_auth" --- .gitignore | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..8a6e5aa --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +# +------------+ +# + Snowblocks + +# +------------+ +# +--- git ---+ +gitconfig_auth From e9c873ec4538e6f489bcc74b2296ac467b628881 Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Sun, 8 Jan 2017 11:40:49 +0100 Subject: [PATCH 005/214] GHI-#1 Implement snowblock configuration file --- snowblocks/git/snowblock.json | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 snowblocks/git/snowblock.json diff --git a/snowblocks/git/snowblock.json b/snowblocks/git/snowblock.json new file mode 100644 index 0000000..b5feecd --- /dev/null +++ b/snowblocks/git/snowblock.json @@ -0,0 +1,13 @@ +[ + { + "clean": ["~"] + }, + { + "link": { + "~/.git-commit-msg": null, + "~/.gitconfig": null, + "~/.gitconfig_auth": null, + "~/.gitignore": null + } + } +] From c5e33d1fded5ff15f1ccf334d86a92eb5c045ae3 Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Tue, 10 Jan 2017 17:03:37 +0100 Subject: [PATCH 006/214] GHI-#3 Implement vimrc --- snowblocks/vim/vimrc | 229 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 229 insertions(+) create mode 100644 snowblocks/vim/vimrc diff --git a/snowblocks/vim/vimrc b/snowblocks/vim/vimrc new file mode 100644 index 0000000..d1596bc --- /dev/null +++ b/snowblocks/vim/vimrc @@ -0,0 +1,229 @@ +" ++++++++++++++++++++++++++++++++++++++++++++++++++++++ +" title Vim Configuration + +" project igloo + +" repository https://github.com/arcticicestudio/igloo + +" author Arctic Ice Studio + +" email development@arcticicestudio.com + +" copyright Copyright (C) 2017 + +" ++++++++++++++++++++++++++++++++++++++++++++++++++++++ +" +" [References] +" Google Style Guide +" (https://google.github.io/styleguide/vimscriptguide.xml) + +"+---------+ +"+ Plugins + +"+---------+ +call plug#begin(expand('~/.vim/plugged')) +Plug 'mattn/emmet-vim' +Plug 'Yggdroot/indentLine' +Plug 'itchyny/lightline.vim' +Plug 'scrooloose/nerdtree' +Plug 'Townk/vim-autoclose' +Plug 'gorodinskiy/vim-coloresque' +Plug 'tpope/vim-fugitive' +Plug 'airblade/vim-gitgutter' +Plug 'pangloss/vim-javascript' + +Plug 'arcticicestudio/nord-vim' + +if v:version >= 704 + Plug 'honza/vim-snippets' + Plug 'SirVer/ultisnips' +endif +call plug#end() + +"+--- Yggdroot/indentLine ---+ +let g:indentLine_enabled = 0 +let g:indentLine_char = '│' + +"+--- itchyny/lightline.vim ---+ +let g:lightline = { + \ 'colorscheme': 'nord', + \ 'active': { + \ 'left': [ + \ [ 'mode', 'paste' ], + \ [ 'fugitive', 'filename' ] + \ ] + \ }, + \ 'component_function': { + \ 'fugitive': 'LightlineFugitive', + \ 'readonly': 'LightlineReadonly', + \ 'modified': 'LightlineModified', + \ 'filename': 'LightlineFilename' + \ }, + \ 'separator': { + \ 'left': '', + \ 'right': '' + \ }, + \ 'subseparator': { + \ 'left': '', + \ 'right': '' + \ } + \ } + +function! LightlineModified() + if &filetype == "help" + return "" + elseif &modified + return "+" + elseif &modifiable + return "" + else + return "" + endif +endfunction + +function! LightlineReadonly() + if &filetype == "help" + return "" + elseif &readonly + return "" + else + return "" + endif +endfunction + +function! LightlineFugitive() + if exists("*fugitive#head") + let branch = fugitive#head() + return branch !=# '' ? ' '.branch : '' + endif + return '' +endfunction + +function! LightlineFilename() + return ('' != LightlineReadonly() ? LightlineReadonly() . ' ' : '') . + \ ('' != expand('%:t') ? expand('%:t') : '[No Name]') . + \ ('' != LightlineModified() ? ' ' . LightlineModified() : '') +endfunction + +"+--- airblade/vim-gitgutter ---+ +let g:gitgutter_sign_column_always = 1 +let g:gitgutter_realtime = 1 +let g:gitgutter_eager = 1 + +"+--- pangloss/vim-javascript ---+ +let g:javascript_enable_domhtmlcss = 1 +let g:javascript_plugin_jsdoc = 1 +let g:javascript_plugin_flow = 1 + +"+--- SirVer/ultisnips ---+ +let g:UltiSnipsExpandTrigger="" +let g:UltiSnipsJumpForwardTrigger="" +let g:UltiSnipsJumpBackwardTrigger="" +let g:UltiSnipsEditSplit="vertical" + +"+---------------+ +"+ Auto Commands + +"+---------------+ +" Enable syntax highlight syncing from start +augroup vimrc-sync-fromstart + autocmd! + autocmd BufEnter * :syntax sync fromstart +augroup END + +" Exit if only NERDTree is open +autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTree") && b:NERDTree.isTabTree()) | q | endif + +"+--------------+ +"+ Key Mappings + +"+--------------+ +let mapleader = "," +let g:mapleader = "," + +map j +map k +map h +map l + +map :NERDTreeToggle + +"+---------------+ +"+ Configuration + +"+---------------+ +syntax enable +colorscheme nord + +filetype plugin on +filetype indent on + +set autochdir +set binary +set mouse=a +set nobackup +set nocompatible +set noswapfile +set nowb +set encoding=utf-8 +set fileencoding=utf-8 +set fileencodings=utf-8 +set ttyfast +set viminfo= +set updatetime=250 + +"+----+ +"+ UI + +"+----+ +set ffs=unix,dos,mac +set gfn=Source\ Code\ Pro\ Regular\ 12 +set guioptions-=m +set guioptions-=T +set guioptions-=r +set guioptions-=L +set hidden +set laststatus=2 +set lazyredraw +set noerrorbells +set noshowmode +set novisualbell +set number +set ruler +set t_vb= +set tm=500 +set wildmenu +set wildignore=*~,*.pyc +set wildignore+=*/.git/*,*/.hg/*,*/.svn/* + +"+--- Editor ---+ +set autoindent +set backspace=indent,eol,start +set cursorline +set colorcolumn=160 +set expandtab +set foldcolumn=1 +set foldenable +set foldlevelstart=10 +set guicursor=a:ver25-Cursor/lCursor +set linebreak +set list +set listchars=eol:¬,space:·,tab:»\ +set magic +set mat=2 +set shiftwidth=2 +set showmatch +set smartindent +set smarttab +set softtabstop=2 +set tabstop=2 +set textwidth=160 +set whichwrap+=<,>,h,l +set wrap + +"+--- Search ---+ +set ignorecase +set smartcase +set hlsearch +set incsearch + +"+-----------+ +"+ Functions + +"+-----------+ +" Shows syntax highlighting groups for the current cursor position +nmap :call SynStack() +function! SynStack() + if !exists("*synstack") + return + endif + echo map(synstack(line('.'), col('.')), 'synIDattr(v:val, "name")') +endfunc From 6763317538c5a079dd194097552c2618e82d347b Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Tue, 10 Jan 2017 17:03:47 +0100 Subject: [PATCH 007/214] GHI-#3 Create snowblock configuration for "vim" --- snowblocks/vim/snowblock.json | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 snowblocks/vim/snowblock.json diff --git a/snowblocks/vim/snowblock.json b/snowblocks/vim/snowblock.json new file mode 100644 index 0000000..a1c6421 --- /dev/null +++ b/snowblocks/vim/snowblock.json @@ -0,0 +1,10 @@ +[ + { + "clean": ["~"] + }, + { + "link": { + "~/.vimrc": null + } + } +] From b3d195b2d98e29b9ae122d80a0422be40ceaf0fb Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Wed, 18 Jan 2017 13:28:04 +0100 Subject: [PATCH 008/214] GHI-#4 Implement binaries to be added to the PATH --- snowblocks/bash/bin/colors | 23 +++++++++++++++ snowblocks/bash/bin/keybase-stop | 36 ++++++++++++++++++++++++ snowblocks/bash/bin/treed | 48 ++++++++++++++++++++++++++++++++ 3 files changed, 107 insertions(+) create mode 100755 snowblocks/bash/bin/colors create mode 100755 snowblocks/bash/bin/keybase-stop create mode 100755 snowblocks/bash/bin/treed diff --git a/snowblocks/bash/bin/colors b/snowblocks/bash/bin/colors new file mode 100755 index 0000000..cfe2258 --- /dev/null +++ b/snowblocks/bash/bin/colors @@ -0,0 +1,23 @@ +#!/usr/bin/env bash +# ++++++++++++++++++++++++++++++++++++++++++++++++++++++ +# title Color Table + +# project igloo + +# repository https://github.com/arcticicestudio/igloo + +# author Arctic Ice Studio + +# email development@arcticicestudio.com + +# copyright Copyright (C) 2017 + +# ++++++++++++++++++++++++++++++++++++++++++++++++++++++ +DOTS='•••' +printf "\n 40m 41m 42m 43m 44m 45m 46m 47m\n"; +for FGs in ' m' ' 1m' ' 30m' '1;30m' ' 31m' '1;31m' ' 32m' \ + '1;32m' ' 33m' '1;33m' ' 34m' '1;34m' ' 35m' '1;35m' \ + ' 36m' '1;36m' ' 37m' '1;37m'; do + FG=${FGs// /} + printf " $FGs \033[$FG $DOTS " + for BG in 40m 41m 42m 43m 44m 45m 46m 47m; do + printf "$EINS \033[$FG\033[$BG $DOTS \033[0m"; + done + printf "\n" +done +printf "\n" +unset -v DOTS diff --git a/snowblocks/bash/bin/keybase-stop b/snowblocks/bash/bin/keybase-stop new file mode 100755 index 0000000..de90e1c --- /dev/null +++ b/snowblocks/bash/bin/keybase-stop @@ -0,0 +1,36 @@ +#!/usr/bin/env bash +# ++++++++++++++++++++++++++++++++++++++++++++++++++++++ +# title Keybase Stopper + +# project igloo + +# repository https://github.com/arcticicestudio/igloo + +# author Arctic Ice Studio + +# email development@arcticicestudio.com + +# copyright Copyright (C) 2017 + +# ++++++++++++++++++++++++++++++++++++++++++++++++++++++ +# +# Stops any running keybase services. +set -e -u -o pipefail + +if killall Keybase &> /dev/null; then + printf "\e[32m=>\e[0m Keybase GUI\n" +else + printf "\e[31mX\e[0m Keybase GUI\n" +fi + +if fusermount -uz /keybase &> /dev/null; then + printf "\e[32m=>\e[0m \e[34m/keybase\e[0m unmount\n" +else + printf "\e[31mX\e[0m \e[34m/keybase\e[0m unmount\n" +fi + +if killall kbfsfuse &> /dev/null; then + printf "\e[32m=>\e[0m kbfsfuse\n" +else + printf "\e[31mX\e[0m kbfsfuse\n" +fi + +if killall keybase &> /dev/null; then + printf "\e[32m=>\e[0m keybase service\n" +else + printf "\e[31mX\e[0m keybase service\n" +fi diff --git a/snowblocks/bash/bin/treed b/snowblocks/bash/bin/treed new file mode 100755 index 0000000..14e36fa --- /dev/null +++ b/snowblocks/bash/bin/treed @@ -0,0 +1,48 @@ +#!/usr/bin/env bash +# ++++++++++++++++++++++++++++++++++++++++++++++++++++++ +# title Colored Directory Tree + +# project igloo + +# repository https://github.com/arcticicestudio/igloo + +# author Arctic Ice Studio + +# email development@arcticicestudio.com + +# copyright Copyright (C) 2017 + +# ++++++++++++++++++++++++++++++++++++++++++++++++++++++ +# +# Prints an numbered advanced, recursive and colored directory treeview. +# +# @throws 1 Invalid option +# @throws 2 Missing argument +# @throws 3 invalid argument + +__cleanup() { + unset -v + unset -f help usage __cleanup +} + +while getopts ":h" option ; do + case "$option" in + h) + help + exit 0 + ;; + \?) + printf "Invalid option: -%s" "$OPTARG" + exit 1 + ;; + :) + printf "-%s requires an argument." "$OPTARG" + exit 2 + ;; + esac +done + +# +--- Null Parameter Handling ---+ +if [ -z "$1" -o "$1" = "-" ]; then + help + exit 2 +fi + +tree -aC -I ".git|node_modules|bower_components" --dirsfirst "$@" | less -FRNX + +__cleanup +exit 0 From fa814abaf5e4ddd4a9bb974460130183c6d8f9e0 Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Wed, 18 Jan 2017 13:28:40 +0100 Subject: [PATCH 009/214] GHI-#4 Implement package configurations --- snowblocks/bash/config/pkg/grep | 48 ++++++++++++++++++++++++++ snowblocks/bash/config/pkg/history | 51 ++++++++++++++++++++++++++++ snowblocks/bash/config/pkg/java | 52 ++++++++++++++++++++++++++++ snowblocks/bash/config/pkg/less | 54 ++++++++++++++++++++++++++++++ 4 files changed, 205 insertions(+) create mode 100644 snowblocks/bash/config/pkg/grep create mode 100644 snowblocks/bash/config/pkg/history create mode 100644 snowblocks/bash/config/pkg/java create mode 100644 snowblocks/bash/config/pkg/less diff --git a/snowblocks/bash/config/pkg/grep b/snowblocks/bash/config/pkg/grep new file mode 100644 index 0000000..42cd4ad --- /dev/null +++ b/snowblocks/bash/config/pkg/grep @@ -0,0 +1,48 @@ +#!/usr/bin/env bash +# ++++++++++++++++++++++++++++++++++++++++++++++++++++++ +# title grep Configuration + +# project igloo + +# repository https://github.com/arcticicestudio/igloo + +# author Arctic Ice Studio + +# email development@arcticicestudio.com + +# copyright Copyright (C) 2017 + +# ++++++++++++++++++++++++++++++++++++++++++++++++++++++ +# +# [References] +# GNU grep +# (http://www.gnu.org/software/grep/manual/grep.html) +# terminfo(5) + +# +--------+ +# + Colors + +# +--------+ +# Set the terminfo capabilitiy substrings for the color environment variable interpreted by the "termcap" compatibility +# application interface. +# +# "sl" +# Whole selected lines. Default is empty. +# "cx" +# Whole context lines. Default is empty. +# "rv" +# Boolean value that reverses (swaps) the meanings of the "sl" and "cx" capabilities. Default is "false". +# "mt" +# Matching non-empty text in any matching line. +# "ms" +# Matching non-empty text in a selected line. +# "mc" +# Matching non-empty text in a context line. +# "fn" +# File names prefixing any content line. +# "ln" +# Line numbers prefixing any content line. +# "bn" +# Byte offsets prefixing any content line. +# "se" +# Separators that are inserted between +# - selected line fields (':') +# - context line fields ('-') +# - groups of adjacent lines when nonzero context is specified ("--") +# "ne" +# Boolean value that prevents clearing to the end of line using erase in line (EL) to Right ("\33[K") each time a +# colorized item ends. +export GREP_COLORS="fn=34:mt=01;34:ln=01;30:se=30" diff --git a/snowblocks/bash/config/pkg/history b/snowblocks/bash/config/pkg/history new file mode 100644 index 0000000..7d5abb4 --- /dev/null +++ b/snowblocks/bash/config/pkg/history @@ -0,0 +1,51 @@ +#!/usr/bin/env bash +# ++++++++++++++++++++++++++++++++++++++++++++++++++++++ +# title history Configuration + +# project igloo + +# repository https://github.com/arcticicestudio/igloo + +# author Arctic Ice Studio + +# email development@arcticicestudio.com + +# copyright Copyright (C) 2017 + +# ++++++++++++++++++++++++++++++++++++++++++++++++++++++ +# +# [References] +# terminfo(5) +# ISO-8601 +# (http://www.iso.org/iso/home/standards/iso8601.htm) + +# +--------+ +# + Output + +# +--------+ +# Sets the amount of entries to be unlimited. +export HISTSIZE="" + +# Sets the filesize to be unlimited. +export HISTFILESIZE="" + +# Creates the log destination folder and sets the filename based on the current date. +if [ ! -d $UMIAQ_HOME/.log ]; then + mkdir $UMIAQ_HOME/.log +fi +HISTFILE=$UMIAQ_HOME/.log/`\date "+%Y-%m-%d"` + +# +--------+ +# + Format + +# +--------+ +# Use ISO-8681 time format. +export HISTTIMEFORMAT="[%Y-%m-%d %H:%M:%S UTC%z] " + +# Define commands that should be ignored. +# The commands must be separated by a double point and include the exact option- and flag parameters! +export HISTIGNORE="pwd:ls:ls -ltr:ls -lAhF:cd ..:.." + +# Sets the control filter. +# +# "ignoredups" +# Ignores duplicates +# "ignorespace" +# Ignores commands beginning with a space character +# "ignoreboth" +# Implies "ignoredups" and "ignorespace" +# "erasedups" +# Erase duplicates across the whole history +export HISTCONTROL="ignoreboth" diff --git a/snowblocks/bash/config/pkg/java b/snowblocks/bash/config/pkg/java new file mode 100644 index 0000000..69397ee --- /dev/null +++ b/snowblocks/bash/config/pkg/java @@ -0,0 +1,52 @@ +#!/usr/bin/env bash +# ++++++++++++++++++++++++++++++++++++++++++++++++++++++ +# title Java Configuration + +# project igloo + +# repository https://github.com/arcticicestudio/igloo + +# author Arctic Ice Studio + +# email development@arcticicestudio.com + +# copyright Copyright (C) 2017 + +# ++++++++++++++++++++++++++++++++++++++++++++++++++++++ +# +# [References] +# StackOverflow +# (http://stackoverflow.com/questions/28327620/difference-between-java-options-java-tool-options-and-java-opts) +# Oracle JDK 8 +# (http://docs.oracle.com/javase/8/docs/technotes/guides/2d/flags.html#aaFonts) +# (http://docs.oracle.com/javase/8/docs/technotes/guides/2d/flags.html#xrender) +# NetBeans Wiki +# (http://wiki.netbeans.org/FaqFontRendering) +# java(1) +# javac(1) + +# Sets the default system-wide JVM options. +# +# "-Dawt.useSystemAAFontSettings" +# Use system settings for font anti-aliasing. +# "-Dsun.java2d.xrender" +# Enable the XRender-based Java 2D rendering pipeline for modern X11-based desktops, offering improved graphics +# performance. +# "-Dswing.aatext" +# Enable the font anti-aliasing for Swing-based applications. +# +# Constant names in braces are values for the "java.awt.RenderingHint" class. +# +# > awt.useSystemAAFontSettings +# "off" | "false" | "default" ("VALUE_TEXT_ANTIALIAS_DEFAULT") +# No anti-aliasing. +# "on" ("VALUE_TEXT_ANTIALIAS_ON") +# Full anti-aliasing without sub-pixel rendering +# "gasp" ("VALUE_TEXT_ANTIALIAS_GASP") +# Use the font's built-in hinting instructions with sub-pixel rendering, intended for use both on CRT and LCD . +# "lcd" | "lcd_hrgb" ("VALUE_TEXT_ANTIALIAS_LCD_HRGB") +# Anti-aliasing tuned for many popular LCD monitors with sub-pixel rendering, optimized for LCD. +# "lcd_hbgr" ("VALUE_TEXT_ANTIALIAS_LCD_HBGR") +# Alternative LCD monitor setting. Same as "lcd", but with different distribution of sub pixels (monitor upside +# down). +# "lcd_vrgb" ("VALUE_TEXT_ANTIALIAS_LCD_VRGB") +# Alternative LCD monitor setting. Same as "lcd", but with different distribution of sub pixels (monitor is +# vertical). +# "lcd_vbgr" ("VALUE_TEXT_ANTIALIAS_LCD_VBGR") +# Alternative LCD monitor setting. Same as "lcd", but with different distribution of sub pixels (vertical again but +# on other side). +export _JAVA_OPTIONS="-Dawt.useSystemAAFontSettings=lcd -Dsun.java2d.xrender=true -Dswing.aatext=true" diff --git a/snowblocks/bash/config/pkg/less b/snowblocks/bash/config/pkg/less new file mode 100644 index 0000000..4d73d75 --- /dev/null +++ b/snowblocks/bash/config/pkg/less @@ -0,0 +1,54 @@ +#!/usr/bin/env bash +# ++++++++++++++++++++++++++++++++++++++++++++++++++++++ +# title less Configuration + +# project igloo + +# repository https://github.com/arcticicestudio/igloo + +# author Arctic Ice Studio + +# email development@arcticicestudio.com + +# copyright Copyright (C) 2017 + +# ++++++++++++++++++++++++++++++++++++++++++++++++++++++ +# +# [References] +# GNU less +# (https://www.gnu.org/software/less) +# terminfo(5) + +# Use lesspipe(1) for non-text input. +[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)" + +# +--------+ +# + Colors + +# +--------+ +# Sets the terminfo variables of the termcap compatibility application interface. +# Provides colored output for the "man" command. +# +# Escape Sequences Comparision Table +# ================================== +# termcap terminfo function +# ------- -------- -------- +# ks smkx Send commands via keypad +# ke rmkx Send digits via keypad +# vb flash Emit visual bell +# mb blink Start blink +# md bold Start bold +# me sgr0 Turn off bold, blink and underline +# so smso Start standout (reverse video) +# se rmso Stop standout +# us smul Start underline +# ue rmul Stop underline +# +--- Blink ---+ +export LESS_TERMCAP_mb=$'\e[01;34m' + +# +--- Keywords ---+ +export LESS_TERMCAP_md=$'\e[01;34m' + +# +--- Mode Stop ---+ +export LESS_TERMCAP_me=$'\e[0m' + +# +--- Standout-Mode (Info Box) ---+ +export LESS_TERMCAP_so=$'\e[01;30m' +export LESS_TERMCAP_se=$'\e[0m' + +# +--- Constants ---+ +export LESS_TERMCAP_us=$'\e[01;34m' +export LESS_TERMCAP_ue=$'\e[0m' From 802258472da1afc0089cdef2a0bd22d9b51718a4 Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Wed, 18 Jan 2017 13:28:55 +0100 Subject: [PATCH 010/214] GHI-#4 Implement environment configurations --- snowblocks/bash/config/env/archbook | 1 + snowblocks/bash/config/env/igloo | 37 ++++++++++++++++++++++++++++ snowblocks/bash/config/env/illuvigaq | 1 + 3 files changed, 39 insertions(+) create mode 120000 snowblocks/bash/config/env/archbook create mode 100644 snowblocks/bash/config/env/igloo create mode 120000 snowblocks/bash/config/env/illuvigaq diff --git a/snowblocks/bash/config/env/archbook b/snowblocks/bash/config/env/archbook new file mode 120000 index 0000000..d362f87 --- /dev/null +++ b/snowblocks/bash/config/env/archbook @@ -0,0 +1 @@ +igloo \ No newline at end of file diff --git a/snowblocks/bash/config/env/igloo b/snowblocks/bash/config/env/igloo new file mode 100644 index 0000000..8706139 --- /dev/null +++ b/snowblocks/bash/config/env/igloo @@ -0,0 +1,37 @@ +#!/usr/bin/env bash +# ++++++++++++++++++++++++++++++++++++++++++++++++++++++ +# title Igloo Environment + +# project igloo + +# repository https://github.com/arcticicestudio/igloo + +# author Arctic Ice Studio + +# email development@arcticicestudio.com + +# copyright Copyright (C) 2017 + +# ++++++++++++++++++++++++++++++++++++++++++++++++++++++ +export LANG=en_US.UTF-8 +export LC_MESSAGES=POSIX + +export STORE_RUN=$HOME/store/run +export BITFROEST_HOME=$HOME/store/bitfroest + +export ATOM_HOME=$STORE_RUN/atom +export AUDACITY_PATH=$STORE_RUN/audacity +export FZ_DATADIR=$STORE_RUN/filezilla +export GIMP2_DIRECTORY=$STORE_RUN/gimp +export GRADLE_USER_HOME=$STORE_RUN/gradle +export INKSCAPE_PROFILE_DIR=$STORE_RUN/inkscape +export _JAVA_AWT_WM_NONREPARENTING=1 +export JAVA_HOME=/usr/lib/jvm/default +export M2_REPO=$STORE_RUN/apache-maven-3/repository +export PURPLEHOME=$STORE_RUN/pidgin + +if [[ -e igloo.env.local ]]; then + . igloo.env.local +else + unset -v GNUPGHOME +fi + +PATH_NPM_PACKAGES=$STORE_RUN/npm/bin +PATH_RUBY_GEMS="$HOME/.gem/ruby/2.2.0/bin;$HOME/.gem/ruby/2.3.0/bin" +PATH_INTELLIJ_IDEA_U_HOME=/opt/intellij-idea-u/bin +PATH_GIT_DIFF_HIGHLIGHT=/usr/share/git/diff-highlight +export PATH="${PATH}:$JAVA_HOME/bin:$PATH_NPM_PACKAGES:$PATH_RUBY_GEMS:$PATH_ANI2ICO:$PATH_INTELLIJ_IDEA_U_HOME:$PATH_GIT_DIFF_HIGHLIGHT" diff --git a/snowblocks/bash/config/env/illuvigaq b/snowblocks/bash/config/env/illuvigaq new file mode 120000 index 0000000..d362f87 --- /dev/null +++ b/snowblocks/bash/config/env/illuvigaq @@ -0,0 +1 @@ +igloo \ No newline at end of file From 957af3d25d95fc4092dab39d00778a01e290bce9 Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Wed, 18 Jan 2017 13:29:42 +0100 Subject: [PATCH 011/214] GHI-#4 Implement core module loader --- snowblocks/bash/core/loader/env | 29 +++++++++++++++++++++++++++++ snowblocks/bash/core/loader/pkg | 25 +++++++++++++++++++++++++ 2 files changed, 54 insertions(+) create mode 100644 snowblocks/bash/core/loader/env create mode 100644 snowblocks/bash/core/loader/pkg diff --git a/snowblocks/bash/core/loader/env b/snowblocks/bash/core/loader/env new file mode 100644 index 0000000..3a84426 --- /dev/null +++ b/snowblocks/bash/core/loader/env @@ -0,0 +1,29 @@ +#!/usr/bin/env bash +# ++++++++++++++++++++++++++++++++++++++++++++++++++++++ +# title Environment Configuration Loader + +# project igloo + +# repository https://github.com/arcticicestudio/igloo + +# author Arctic Ice Studio + +# email development@arcticicestudio.com + +# copyright Copyright (C) 2017 + +# ++++++++++++++++++++++++++++++++++++++++++++++++++++++ +__snowblock_bash::core::loader::env::load() { + local __self_name="$(basename $(basename "${BASH_SOURCE[0]}"))" + local envs=$(find -L "$SNOWBLOCK_BASH_BASE_DIR/config/env" -maxdepth 1 -not -name "*.local" -type f) + local env + + for env in $envs; do + if [ "$(basename $env)" = $HOSTNAME ]; then + . $env + if [ $? -eq 0 ]; then + __snowblock_bash::log_debug\ + "[$__self_name] Environment configuration for $(basename $env) successfully loaded" + else + __snowblock_bash::log_debug "[$__self_name] Error while loading environment configuration $env" + fi + break + fi + done +} + +__snowblock_bash::core::loader::env::load diff --git a/snowblocks/bash/core/loader/pkg b/snowblocks/bash/core/loader/pkg new file mode 100644 index 0000000..be65fea --- /dev/null +++ b/snowblocks/bash/core/loader/pkg @@ -0,0 +1,25 @@ +#!/usr/bin/env bash +# ++++++++++++++++++++++++++++++++++++++++++++++++++++++ +# title Package Configuration Loader + +# project igloo + +# repository https://github.com/arcticicestudio/igloo + +# author Arctic Ice Studio + +# email development@arcticicestudio.com + +# copyright Copyright (C) 2017 + +# ++++++++++++++++++++++++++++++++++++++++++++++++++++++ +__snowblock_bash::core::loader::pkg::load() { + local __self_name="$(basename $(basename "${BASH_SOURCE[0]}"))" + local pkgs=$(find -L "$SNOWBLOCK_BASH_BASE_DIR/config/pkg" -maxdepth 1 -not -name "*.local" -type f) + local pkg + + for pkg in $pkgs; do + . $pkg + if [ $? -eq 0 ]; then + __snowblock_bash::log_debug "[$__self_name] Package configuration for $(basename $pkg) successfully loaded" + else + __snowblock_bash::log_debug "[$__self_name] Error while loading package configuration $pkg" + fi + done +} + +__snowblock_bash::core::loader::pkg::load From b440c396b7ecb9bb27dd0e50d224bdacd9d26220 Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Wed, 18 Jan 2017 13:30:03 +0100 Subject: [PATCH 012/214] GHI-#4 Implement core module for aliases --- snowblocks/bash/core/aliases | 64 ++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 snowblocks/bash/core/aliases diff --git a/snowblocks/bash/core/aliases b/snowblocks/bash/core/aliases new file mode 100644 index 0000000..fb89512 --- /dev/null +++ b/snowblocks/bash/core/aliases @@ -0,0 +1,64 @@ +#!/usr/bin/env bash +# ++++++++++++++++++++++++++++++++++++++++++++++++++++++ +# title Aliases + +# project igloo + +# repository https://github.com/arcticicestudio/igloo + +# author Arctic Ice Studio + +# email development@arcticicestudio.com + +# copyright Copyright (C) 2017 + +# ++++++++++++++++++++++++++++++++++++++++++++++++++++++ +# +# [References] +# GNU Bash +# (https://www.gnu.org/software/bash/manual/bash.html#Aliases) +# ISO-8601 - Date and time format +# (http://www.iso.org/iso/home/standards/iso8601.htm) + +# +--------------+ +# + Applications + +# +--------------+ +# +--- atom ---+ +alias atom-hidpi='atom --force-device-scale-factor=1.5' + +# +--- java ---+ +alias jj='java -jar' + +# +--- wget ---+ +# Disable log file +alias wget='wget --hsts-file=' + +# +--- youtube-dl ---+ +alias youtube-dl='youtube-dl --output "%(id)s-%(title)s.%(ext)s"' +alias yta='youtube-dl --extract-audio --audio-format mp3 --audio-quality 0 --audio-format best' + +# +-------+ +# + Basic + +# +-------+ +# Enable colorized long listing with human-readable size- and ISO-8601 date format. +alias ls='LC_COLLATE=C ls -lAh --color=auto --time-style="+%Y-%m-%d +%H:%M:%S" --group-directories-first' + +# Increase verbosity by default. +alias cp='cp -v' +alias mv='mv -v' +alias rm='rm -v' + +# rsync based copy with process detailed information- and process output. +alias cpr='rsync --archive --human-readable --progress --stats' + +# Enable colorized line numbers by default. +alias grep='grep --line-number --color=auto' + +# Enable unified diff format by default. +alias diff='diff -u' + +# Use ISO-8601 date format by default. +alias date='date "+%Y-%m-%d %H:%M:%S UTC%z"' + +# List in raw format with one entry per line. +alias lsraw='LC_COLLATE=C \ls -N1 --group-directories-first' + +# +-------+ +# + Utils + +# +-------+ +# Alert via notify for long running commands. +alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"' From a26894e97e7d36fa132e9628b43c6de3c6b8ffce Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Wed, 18 Jan 2017 13:30:18 +0100 Subject: [PATCH 013/214] GHI-#4 Implement core module for functions --- snowblocks/bash/core/functions | 252 +++++++++++++++++++++++++++++++++ 1 file changed, 252 insertions(+) create mode 100644 snowblocks/bash/core/functions diff --git a/snowblocks/bash/core/functions b/snowblocks/bash/core/functions new file mode 100644 index 0000000..d67571f --- /dev/null +++ b/snowblocks/bash/core/functions @@ -0,0 +1,252 @@ +#!/usr/bin/env bash +# ++++++++++++++++++++++++++++++++++++++++++++++++++++++ +# title Functions + +# project igloo + +# repository https://github.com/arcticicestudio/igloo + +# author Arctic Ice Studio + +# email development@arcticicestudio.com + +# copyright Copyright (C) 2017 + +# ++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +# Switch up as many parent directories as the pass number. +# Goes up one by default if no parameter is passed. +# +# @usage .. +..() { + local d="" + limit=$1 + for ((i=1 ; i <= limit ; i++)); do + d=$d/.. + done + d=$(echo $d | sed 's/^\///') + if [[ -z "$d" ]]; then + d=.. + fi + cd $d + return 0 +} + +# Extract archived files. +# +# @usage extract +# @throws 1 Unsupported or invalid file +extract() { + if [ -f $1 ]; then + case $1 in + *.tar.bz2) tar -jxvf $1 ;; + *.tar.gz) tar -zxvf $1 ;; + *.bz2) bunzip2 $1 ;; + *.gz) gunzip $1 ;; + *.tar) tar -xvf $1 ;; + *.tbz2) tar -jxvf $1 ;; + *.tgz) tar -zxvf $1 ;; + *.zip) unzip $1 ;; + *) + printf "\e[33mUnsupported format\e[0m" + return 1 + ;; + esac + printf "\e[32mExtracted\e[0m %s" "$1" + else + printf "\e[33m%s is not a valid extractable file\e[0m" "$1" + return 1 + fi + return 0 +} + +# Extracts archived files to the specified destination. +# Append a 'v' character at the end to be verbose. +# +# @usage extractto [DESTINATION_FOLDER] [BE_VEROSE] +# @options ["v"] +# @throws 1 No arguments +# @throws 2 File not found +# @throws 3 Invalid user input +# @throws 4 Invalid option +# @throws 5 Unsupported file format +# @throws 6 Write permission error +extractto() { + local isVerbose destination response filename + + trap "echo User aborted." SIGINT SIGTERM + + if [[ "$#" -lt 1 ]]; then + printf "\e[1mUsage: \e[36mextractto \e[01;36m \e[30m[DESTINATION_FOLDER] [v]\e[0m\n" + printf "Append a \e[36mv\e[0m to be verbose" + return 1 + fi + + if [[ ! -e "$1" ]]; then + printf "\e[31mFile not found\e[0m" + return 2 + fi + + if [[ -z "$2" ]]; then + destination="." + elif [[ ! -d "$2" ]]; then + printf "\e[33mDestination folder not exist or is not a directory.\e[0m" + printf "\nCreate? (y/n): " + read response + if [[ $response == y || $response == Y ]]; then + mkdir -p "$2" + if [ $? -eq 0 ]; then + destination="$2" + else + return 6 + fi + else + return 3 + fi + else + destination="$2" + fi + + if [[ ! -z "$3" ]]; then + if [[ "$3" != "v" ]]; then + printf "\e[31mWrong argument %s\e[0m" "$3" + return 4 + fi + isVerbose="$3" + fi + + filename=`basename "$1"` + + case "${filename##*.}" in + tar) + tar x${isVerbose}f "$1" -C "$destination" + printf "\e[36m%s\e[0m > \e[36m%s\e[0m (uncompressed tar)" "$1" "$destination" + ;; + gz) + tar x${isVerbose}fz "$1" -C "$destination" + printf "\e[36m%s\e[0m > \e[36m%s\e[0m (gzip compressed tar)" "$1" "$destination" + ;; + tgz) + tar x${isVerbose}fz "$1" -C "$destination" + printf "\e[36m%s\e[0m > \e[36m%s\e[0m (gzip compressed tar)" "$1" "$destination" + ;; + xz) + tar x${isVerbose}f -J "$1" -C "$destination" + printf "\e[36m%s\e[0m > \e[36m%s\e[0m (gzip compressed tar)" "$1" "$destination" + ;; + bz2) + tar x${isVerbose}fj "$1" -C "$destination" + printf "\e[36m%s\e[0m > \e[36m%s\e[0m (bzip compressed tar)" "$1" "$destination" + ;; + zip) + unzip "$1" -d "$destination" + printf "\e[36m%s\e[0m > \e[36m%s\e[0m (zip compressed tar)" "$1" "$destination" + ;; + rar) + unrar x "$1" "$destination" + printf "\e[36m%s\e[0m > \e[36m%s\e[0m (rar compressed file)" "$1" "$destination" + ;; + 7z) + 7za e "$1" -o"$destination" + printf "\e[36m%s\e[0m > \e[36m%s\e[0m (7zip compressed file)" "$1" "$destination" + ;; + *) + printf "\e[33mUnsupported file format\e[0m" + return 5 + ;; + esac + + trap '' SIGINT SIGTERM + return 0 +} + +# Compress files into archives. +# +# @usage compress +# @throws 1 Unsupported or invalid file +compress() { + if [ -n $1 ]; then + file=$1 + case $file in + *.tar.xz) shift && tar cJf $file $* ;; + *.tar.bz2) shift && tar cjf $file $* ;; + *.tar.gz) shift && tar czf $file $* ;; + *.gz) shift && tar czf $file $* ;; + *.tar) shift && tar cf $file $* ;; + *.tgz) shift && tar czf $file $* ;; + *.zip) shift && zip $file $* ;; + *.7z) shift && 7za a $file $* >/dev/null ;; + *) + echo -e "\e[1;38;5;221m\u2757 \e[0mUnsupported format" + return 1 + ;; + esac + echo -e "\e[1;38;5;77m\u2714 \e[0mCompressed \e[3;38;5;80m'$file'\e[0m" + else + echo -e "\e[1;38;5;160m\u2717 \e[3;38;5;80m'$file' \e[1;37mis not a valid extractable file\e[0m" + return 1 + fi + return 0 +} + +# Shows the current session time. +# Use option "-s" to show the session start. +# +# @usage seti [OPTIONS] +# @options ["-s","-h"] +# @throws 1 Unknown option +seti() { + local uptime session + session=0 + + case "$1" in + -s) + session=1 + ;; + -h) + printf "\e[1mUsage: \e[36mseti \e[30m[OPTIONS]\n" + printf " \e[01;36m-s \e[0mShow session start\n" + printf " \e[01;36m-h \e[0mShow this help\e[0m\n" + return 0 + ;; + -*) + printf "\e[31mUnknown option\e[0m" + return 1 + ;; + esac + + if [ $session -gt 0 ] + then + uptime=$(uptime -s) + else + uptime=$(&1 | grep -v 'Permission denied' +} + +# Compare original and gzipped file size. +gzcomp() { + local origsize=$(wc -c < "$1"); + local gzipsize=$(gzip -c "$1" | wc -c); + local ratio=$(echo "$gzipsize * 100 / $origsize" | bc -l); + printf "orig: %d bytes\n" "$origsize"; + printf "gzip: %d bytes (%2.2f%%)\n" "$gzipsize" "$ratio"; +} + +# Encode a string of Unicode symbols to UTF-8 +escape() { + printf "\\\x%s" $(printf "$@" | xxd -p -c1 -u); +} From 0c3363a0fec6c55b0b52fa28a5be73f456ba8c5c Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Wed, 18 Jan 2017 13:30:52 +0100 Subject: [PATCH 014/214] GHI-#4 Implement core module for built-in shell options --- snowblocks/bash/core/shelloptions | 253 ++++++++++++++++++++++++++++++ 1 file changed, 253 insertions(+) create mode 100644 snowblocks/bash/core/shelloptions diff --git a/snowblocks/bash/core/shelloptions b/snowblocks/bash/core/shelloptions new file mode 100644 index 0000000..cff713a --- /dev/null +++ b/snowblocks/bash/core/shelloptions @@ -0,0 +1,253 @@ +#!/usr/bin/env bash +# ++++++++++++++++++++++++++++++++++++++++++++++++++++++ +# title Shell Built-In Options + +# project igloo + +# repository https://github.com/arcticicestudio/igloo + +# author Arctic Ice Studio + +# email development@arcticicestudio.com + +# copyright Copyright (C) 2017 + +# ++++++++++++++++++++++++++++++++++++++++++++++++++++++ +# +# [References] +# GNU Bash +# (http://www.gnu.org/software/bash/manual/html_node/The-Shopt-Builtin.html) + +# +--------+ +# + Browse + +# +--------+ +# A command name that is the name of a directory is executed as if it were the argument to the "cd" command. +# This option is only used by interactive shells. +shopt -u autocd + +# An argument to the "cd" command that is not a directory is assumed to be the name of a variable whose value is the +# directory to change to. +shopt -u cdable_vars + +# Minor errors in the spelling of a directory component in a cd command will be corrected. +# The errors checked for are transposed characters, a missing character and a character too many. +# If a correction is found, the corrected path is printed, and the command proceeds. +# This option is only used by interactive shells. +shopt -u cdspell + +# +--------+ +# + Checks + +# +--------+ +# Checks that a command found in the hash table exists before trying to execute. +# If a hashed command no longer exists, a normal path search is performed. +shopt -u checkhash + +# Lists the status of any stopped and running jobs before exiting an interactive shell. +# If any jobs are running, this causes the exit to be deferred until a second exit is attempted without an intervening +# command. +# The shell always postpones exiting if any jobs are stopped. +shopt -u checkjobs + +# Checks the window size after each command and, if necessary, updates the values of LINES and COLUMNS. +shopt -s checkwinsize + +# If a file that bash is checking for mail has been accessed since the last time it was checked, the message "The mail +# in mailfile has been read" is displayed. +shopt -u mailwarn + +# +-----------------+ +# + Auto Completion + +# +-----------------+ +# Quotes all shell metacharacters in filenames and directory names when performing completion. +# If not set, bash removes metacharacters such as the dollar character ($) from the set of characters that will be +# quoted in completed filenames when these metacharacters appear in shell variable references in words to be completed. +# This means that dollar characters ($) in variable names that expand to directories will not be quoted. +# Any dollar characters ($) appearing in filenames will not be quoted either. +# Only active when bash is using backslashes to quote completed filenames. +# This variable is set by default, which is the default bash behavior in versions through 4.2. +shopt -s complete_fullquote + +# Replaces directory names with the results of word expansion when performing filename completion. +# This changes the contents of the readline editing buffer. +# If not set, bash attempts to preserve what the user typed. +shopt -u direxpand + +# Attempts spelling correction on directory names during word completion if the directory name initially supplied does +# not exist. +shopt -u dirspell + +# Includes filenames beginning with a '.' in the results of filename expansion. +shopt -u dotglob + +# Suffixes specified by the FIGNORE shell variable cause words to be ignored when performing word completion even if the +# ignored words are the only possible completions. +# This option is enabled by default. +shopt -s force_fignore + +# Patterns which fail to match filenames during filename expansion result in an expansion error. +shopt -u failglob + +# Enables extended pattern matching features for auto completion options. +shopt -s extglob + +# Aliases are expanded. +# This option is enabled by default for interactive shells. +shopt -s expand_aliases + +# Matches filenames in a case-insensitive fashion when performing filename expansion. +shopt -u nocaseglob + +# If Readline is being used, bash will attempt to perform hostname completion when a word containing a '@' is being +# completed. +# This option is enabled by default. +shopt -u hostcomplete + +# If Readline is being used, bash will not attempt to search the PATH for possible completions when completion is +# attempted on an empty line. +shopt -u no_empty_cmd_completion + +# Enables the programmable completion facilities. +# This option is enabled by default. +shopt -s progcomp + +# +---------+ +# + History + +# +---------+ +# Attempts to save all lines of a multiple-line command in the same history entry to allow easy re-editing of multi-line +# commands. +shopt -s cmdhist + +# Appends the history list to the file named by the value of the HISTFILE variable when the shell exits, rather than +# overwriting the file. +shopt -s histappend + +# If Readline is being used, a user is given the opportunity to re-edit a failed history substitution. +shopt -u histreedit + +# If Readline is being used, the results of history substitution are not immediately passed to the shell parser. +# Instead, the resulting line is loaded into the Readline editing buffer, allowing further modification. +shopt -u histverify + +# If the "cmdhist" option is enabled, multi-line commands are saved to the history with embedded newlines rather than +# using semicolon separators where possible. +shopt -u lithist + +# +----------------+ +# + RegExp/Pattern + +# +----------------+ +# $'string' and $"string" quoting is performed within ${parameter} expansions enclosed in double quotes. +# This option is enabled by default. +shopt -s extquote + +# Range expressions used in pattern matching bracket expressions behave as if in the traditional C locale when +# performing comparisons. +# That is, the current locale's collating sequence is not taken into account, so 'b' will not collate between 'A' and +# 'B' and upper- and lower-case ASCII characters will collate together. +shopt -u globasciiranges + +# The pattern '**' used in a filename expansion context will match all files and zero or more directories and +# subdirectories. +# If the pattern is followed by a '/', only directories and subdirectories match. +shopt -u globstar + +# Matches patterns in a case-insensitive fashion when performing matching while executing case or [[ conditional +# commands. +shopt -u nocasematch + +# Allows filename patterns which match no files to expand to a null string, rather than themselves. +shopt -u nullglob + +# Allow a word beginning with '#' to cause that word and all remaining characters on that line to be ignored in an +# interactive shell. +# This option is enabled by default. +shopt -s interactive_comments + +# +-------+ +# + Modes + +# +-------+ +# Enables behavior intended for use by debuggers: +# - The '-F' option to the declare builtins displays the source file name and line number corresponding to each +# function name supplied as an argument +# - If the command run by the DEBUG trap returns a non-zero value, the next command is skipped and not executed +# - If the command run by the DEBUG trap returns a value of 2, and the shell is executing in a subroutine (a shell +# function or a shell script executed by the '.' or source builtins), a call to return is simulated +# - BASH_ARGC and BASH_ARGV are updated as described in their descriptions +# - Function tracing is enabled: Command substitution, shell functions and subshells invoked with ( command ) inherit +# the DEBUG and RETURN traps +# - Error tracing is enabled: Command substitution, shell functions and subshells invoked with ( command ) inherit the +# ERR trap +shopt -u extdebug + +# The shell sets this option if it is started as a login shell. +# The value may not be changed. +shopt -u login_shell + +# The shell sets this option if it is started in restricted mode. +# The value may not be changed. +# This is not reset when the startup files are executed, allowing the startup files to discover whether or not a shell +# is restricted. +shopt -u restricted_shell +# +--------------------+ +# + Exception Handling + +# +--------------------+ +# If set, a non-interactive shell will not exit if it cannot execute the file specified as an argument to the "exec" +# builtin command. +# An interactive shell does not exit if "exec" fails. +shopt -u execfail + +# All shell error messages are written in the standard GNU error message format. +shopt -u gnu_errfmt + +# +--------+ +# + Prompt + +# +--------+ +# Prompt strings undergo parameter expansion, command substitution, arithmetic expansion and quote removal after being +# expanded. +# This option is enabled by default. +shopt -s promptvars + +# +--------------------------+ +# + Builtin Command Behavior + +# +--------------------------+ +# The "shift" command prints an error message when the shift count exceeds the number of positional parameters. +shopt -u shift_verbose + +# The "source" built-in command uses the value of PATH to find the directory containing the file supplied as an argument. +# This option is enabled by default. +shopt -s sourcepath + +# The "echo" command expands backslash-escape (\) sequences by default. +shopt -u xpg_echo + +# +------+ +# + Jobs + +# +------+ +# Will send SIGHUP to all jobs when an interactive login shell exits. +shopt -u huponexit + +# If job control is not active, the shell runs the last command of a pipeline not executed in the background in the +# current shell environment. +shopt -u lastpipe +# +---------------+ +# + Compatibility + +# +---------------+ +# Changes the bash behavior to that of version 3.1 with respect to quoted arguments to the conditional command's '=~' +# operator and with respect to locale-specific string comparison when using the '[[' conditional command's '<' and '>' +# operators. +# Versions prior to bash-4.1 use ASCII collation and strcmp(3). +# bash-4.1 and later use the current locale's collation sequence and strcoll(3). +shopt -u compat31 + +# Changes the bash behavior to that of version 3.2 with respect to locale-specific string comparison when using the '[[' +# conditional command's '<' and '>' operators. +shopt -u compat32 + +# Changes the bash behavior to that of version 4.0 with respect to locale-specific string comparison when using the "[[" +# conditional command's '<' and '>' operators and the effect of interrupting a command list. +# Versions 4.0 and later interrupt the list as if the shell received interrupt. +# Previous versions continue with the next command in the list. +shopt -u compat40 + +# If in POSIX mode, bash treats a single quote ('') in a double-quoted ("") parameter expansion as a special character. +# The single quotes ('') must match (an even number) and the characters between the single quotes ('') are considered +# quoted. +# This is the behavior of POSIX mode through version 4.1. +# The default Bash behavior remains as in previous versions. +shopt -u compat41 + +# bash does not process the replacement string in the pattern substitution word expansion using quote removal. +shopt -u compat42 From 9cd9e5d2488cf76a01c091e21a329287ecc8559b Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Wed, 18 Jan 2017 13:31:18 +0100 Subject: [PATCH 015/214] GHI-#4 Implement core module for the shell prompt --- snowblocks/bash/core/prompt | 135 ++++++++++++++++++++++++++++++++++++ 1 file changed, 135 insertions(+) create mode 100644 snowblocks/bash/core/prompt diff --git a/snowblocks/bash/core/prompt b/snowblocks/bash/core/prompt new file mode 100644 index 0000000..63c4827 --- /dev/null +++ b/snowblocks/bash/core/prompt @@ -0,0 +1,135 @@ +#!/usr/bin/env bash +# ++++++++++++++++++++++++++++++++++++++++++++++++++++++ +# title Shell Prompt + +# project igloo + +# repository https://github.com/arcticicestudio/igloo + +# author Arctic Ice Studio + +# email development@arcticicestudio.com + +# copyright Copyright (C) 2017 + +# ++++++++++++++++++++++++++++++++++++++++++++++++++++++ +# +# [References] +# StackOverflow +# (http://stackoverflow.com/questions/19092488/custom-bash-prompt-is-overwriting-itself/19501525#19501528) +# (http://mywiki.wooledge.org/BashFAQ/053) + +# +-----------------+ +# + Git Integration + +# +-----------------+ +# +--- Dirty State ---+ +# Show unstaged (*) and staged (+) changes. +# Also configurable per repository via "bash.showDirtyState". +GIT_PS1_SHOWDIRTYSTATE=true + +# +--- Stash State ---+ +# Show currently stashed ($) changes. +GIT_PS1_SHOWSTASHSTATE=false + +# +--- Untracked Files ---+ +# Show untracked (%) changes. +# Also configurable per repository via "bash.showUntrackedFiles". +GIT_PS1_SHOWUNTRACKEDFILES=true + +# +--- Upstream Difference ---+ +# Show indicator for difference between HEAD and its upstream. +# +# < Behind upstream +# > Ahead upstream +# <> Diverged upstream +# = Equal upstream +# +# Control behaviour by setting to a space-separated list of values: +# auto Automatically show indicators +# verbose Show number of commits ahead/behind (+/-) upstream +# name If verbose, then also show the upstream abbrev name +# legacy Do not use the '--count' option available in recent versions of git-rev-list +# git Always compare HEAD to @{upstream} +# svn Always compare HEAD to your SVN upstream +# +# By default, __git_ps1 will compare HEAD to SVN upstream ('@{upstream}' if not available). +# Also configurable per repository via "bash.showUpstream". +GIT_PS1_SHOWUPSTREAM="auto verbose name" + +# +--- Describe Style ---+ +# Show more information about the identity of commits checked out as a detached HEAD. +# +# Control behaviour by setting to one of these values: +# contains Relative to newer annotated tag (v1.6.3.2~35) +# branch Relative to newer tag or branch (master~4) +# describe Relative to older annotated tag (v1.6.3.1-13-gdd42c2f) +# default Exactly matching tag +GIT_PS1_DESCRIBE_STYLE="contains" + +# +--- Colored Hints ---+ +# Show colored hints about the current dirty state. The colors are based on the colored output of "git status -sb". +# NOTE: Only available when using __git_ps1 for PROMPT_COMMAND! +GIT_PS1_SHOWCOLORHINTS=true + +# +--- pwd Ignore ---+ +# Disable __git_ps1 output when the current directory is set up to be ignored by git. +# Also configurable per repository via "bash.hideIfPwdIgnored". +GIT_PS1_HIDE_IF_PWD_IGNORED=false + +compile_prompt () { + local CONNECTBAR_DOWN=$'\u250C\u2500\u257C' + local CONNECTBAR_UP=$'\u2514\u2500\u257C' + local GITSPLITBAR=$'\u2570\u257C' + local SPLITBAR=$'\u257E\u2500\u257C' + local ARROW=$'\u25B6' + local c_gray='\e[01;30m' + local c_blue='\e[0;34m' + local c_cyan='\e[0;36m' + local c_reset='\e[0m' + + # > Connectbar Down + # Format: + # (newline)(bright colors)(connectbar down) + PS1="\n${c_gray}" + PS1+="$CONNECTBAR_DOWN" + + # > Username + # Format: + # (bracket open)(username)(bracket close)(splitbar) + PS1+="[${c_blue}\u${c_gray}]" + PS1+="$SPLITBAR" + + # > Jobs + # Format: + # (bracket open)(jobs)(bracket close)(splitbar) + PS1+="[${c_blue}\j${c_gray}]" + + # > Exit Status + # Format: + # (bracket open)(last exit status)(bracket close)(splitbar) + PS1+="[${c_blue}$?${c_gray}]" + PS1+="$SPLITBAR" + + # > Time + # Format: + # (bracket open)(time)(bracket close)(newline)(connectbar up) + PS1+="[${c_blue}\D{%H:%M:%S}${c_gray}]\n" + PS1+="$CONNECTBAR_UP" + + # > Working Directory + # Format: + # (bracket open)(working directory)(bracket close)(newline) + PS1+="[${c_blue}\w${c_gray}]\n" + + # > Git + # Format: + # (gitsplitbar)(bracket open)(git branch)(bracket close)(splitbar) + # (bracket open)(HEAD-SHA)(bracket close) + PS1+="$(__git_ps1 " \\u2570\\u257C[${c_cyan}%s${c_gray}]\\u257E\\u2500\\u257C[${c_cyan}$(git rev-parse --short HEAD 2> /dev/null)${c_gray}]")" + # Append additional newline if in git repository + if [[ ! -z $(__git_ps1) ]]; then + PS1+='\n' + fi + + # > Arrow + # NOTE: Color must be escaped with '\[\]' to fix the text overflow bug! + # Format: + # (arrow)(color reset) + PS1+="$ARROW \[\e[0m\]" +} + +PROMPT_COMMAND='compile_prompt' From 295b050268ac0bf36903f5c50ff3ecfda8f6fe31 Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Wed, 18 Jan 2017 13:31:52 +0100 Subject: [PATCH 016/214] GHI-#4 Implement the main bootstrap module --- snowblocks/bash/bootstrap | 144 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 144 insertions(+) create mode 100755 snowblocks/bash/bootstrap diff --git a/snowblocks/bash/bootstrap b/snowblocks/bash/bootstrap new file mode 100755 index 0000000..de5a869 --- /dev/null +++ b/snowblocks/bash/bootstrap @@ -0,0 +1,144 @@ +#!/usr/bin/env bash +# ++++++++++++++++++++++++++++++++++++++++++++++++++++++ +# title Bash Snowblock Bootstrap + +# project igloo + +# repository https://github.com/arcticicestudio/igloo + +# author Arctic Ice Studio + +# email development@arcticicestudio.com + +# copyright Copyright (C) 2017 + +# ++++++++++++++++++++++++++++++++++++++++++++++++++++++ +# +# [References] +# StackOverflow +# (http://stackoverflow.com/questions/592620/check-if-a-program-exists-from-a-bash-script/677212#677212) + + +__snowblock_bash::get_bootstrap_link_target() { + printf "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/$(basename "${BASH_SOURCE[0]}")" +} + +__snowblock_bash::get_bootstrap_link_source() { + printf "$(readlink $(__snowblock_bash::get_bootstrap_link_target))" +} + +__snowblock_bash::get_base_dir() { + if hash realpath 2>/dev/null; then + printf "$(dirname $(realpath "${BASH_SOURCE[0]}"))" + else + printf "$(dirname $(__snowblock_bash::get_bootstrap_link_source))" + fi +} + +__snowblock_bash::get_module_basename() { + printf "$($SNOWBLOCK_BASH_BASE_DIR/$(basename "${BASH_SOURCE[0]}"))" +} + +__snowblock_bash::log_error() { + printf "\e[31m%s\e[0m\n" "✖ $*" 1>&2 +} + +__snowblock_bash::log_warning() { + printf "\e[33m%s\e[0m\n" "$*" +} + +__snowblock_bash::log_success() { + printf "\e[32m%s\e[0m\n" "✔ $*" +} + +__snowblock_bash::log_info() { + printf "\e[34m%s\e[0m\n" "➜ $*" +} + +__snowblock_bash::log_debug() { + if [ "$SNOWBLOCK_BASH_DEBUG" = true ]; then + printf "\e[01;30m[\e[0;35m%s\e[01;30m] \e[0;35m%s\e[0m\n" "$(\date "+%Y-%m-%d %H:%M:%S")" "$*" + fi +} + +__snowblock_bash::setup_history() { + if [ "$SNOWBLOCK_BASH_HISTORY" = true ]; then + mkdir -p $SNOWBLOCK_BASH_BASE_DIR/.log 2> /dev/null + export HISTFILE=$SNOWBLOCK_BASH_BASE_DIR/.log/`\date "+%Y-%m-%d"` + else + export HISTFILE= + fi +} + +__snowblock_bash::load_core_modules() { + local __self_name="$(basename $(readlink "${BASH_SOURCE[0]}"))" + + if [ "$#" -eq 0 ]; then + __snowblock_bash::log_debug "[$__self_name] Missing parameter while calling function $FUNCNAME" + __snowblock_bash::log_error "[$__self_name] Error while loading core modules" + return 1 + fi + local module + + for module in $*; do + module=$SNOWBLOCK_BASH_BASE_DIR/core/$module + if [ -f $module ]; then + . $module + if [ $? -eq 0 ]; then + __snowblock_bash::log_debug "[$__self_name] Core module $(basename $module) successfully loaded" + else + __snowblock_bash::log_debug "[$__self_name] Error while loading core module $(basename $module)" + fi + else + __snowblock_bash::log_error "[$__self_name] Core module $(basename $module) not found" + return 1 + fi + done +} + +__snowblock_bash::load_third_party_scripts() { + local __self_name="$(basename $(readlink "${BASH_SOURCE[0]}"))" + + if [ "$#" -eq 0 ]; then + __snowblock_bash::log_debug "[$__self_name] Missing parameter while calling function $FUNCNAME" + __snowblock_bash::log_error "[$__self_name] Error while loading third-party scripts" + return 1 + fi + local script + + for script in $*; do + if [ -f $script ]; then + . $script + if [ $? -eq 0 ]; then + __snowblock_bash::log_debug "[$__self_name] Third-Party script $script successfully loaded" + else + __snowblock_bash::log_debug "[$__self_name] Error while loading third-party script $script" + fi + else + __snowblock_bash::log_debug "[$__self_name] Third-Party script $script not found" + fi + done +} + +__snowblock_bash::register_binaries() { + export PATH="${PATH}:$SNOWBLOCK_BASH_BINARIES" +} + +export SNOWBLOCK_BASH_BASE_DIR="$(__snowblock_bash::get_base_dir)" +export SNOWBLOCK_BASH_HISTORY=true +export SNOWBLOCK_BASH_DEBUG=false +export SNOWBLOCK_BASH_BINARIES=$SNOWBLOCK_BASH_BASE_DIR/bin + +# +--------------+ +# + Core Modules + +# +--------------+ +__snowblock_bash::load_core_modules loader/env loader/pkg +__snowblock_bash::load_core_modules aliases functions prompt shelloptions + +# +--------------------+ +# +Third-Party Scripts + +# +--------------------+ +# Git prompt bash support. +__snowblock_bash::load_third_party_scripts /usr/share/git/completion/git-prompt.sh + +# Programmable bash completion features. +__snowblock_bash::load_third_party_scripts /usr/share/bash-completion/bash_completion + +__snowblock_bash::setup_history +__snowblock_bash::register_binaries + +__snowblock_bash::log_debug "[$(basename $(__snowblock_bash::get_bootstrap_link_source))] bootstrap completed" From a0061906b7dc462661d3406426d4f188a9bb6c92 Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Wed, 18 Jan 2017 13:32:31 +0100 Subject: [PATCH 017/214] GHI-#4 Create the snowblock configuration file --- .gitignore | 7 ++++++- snowblocks/bash/snowblock.json | 11 +++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 snowblocks/bash/snowblock.json diff --git a/.gitignore b/.gitignore index 8a6e5aa..6af0130 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,10 @@ # +------------+ # + Snowblocks + # +------------+ +# +--- bash ---+ +snowblocks/bash/**/*.local +snowblocks/bash/.log + + # +--- git ---+ -gitconfig_auth +snowblocks/git/gitconfig_auth diff --git a/snowblocks/bash/snowblock.json b/snowblocks/bash/snowblock.json new file mode 100644 index 0000000..8571095 --- /dev/null +++ b/snowblocks/bash/snowblock.json @@ -0,0 +1,11 @@ +[ + { + "clean": ["~"] + }, + { + "link": { + "~/.bash_profile": "bootstrap", + "~/.bashrc": "bootstrap" + } + } +] From 411a13b4ee46d03609c79edffe5dd661eb62ddd3 Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Wed, 18 Jan 2017 15:23:00 +0100 Subject: [PATCH 018/214] GHI-#5 Remove reamining code fragment of old bash framework version --- snowblocks/bash/config/pkg/history | 6 ------ 1 file changed, 6 deletions(-) diff --git a/snowblocks/bash/config/pkg/history b/snowblocks/bash/config/pkg/history index 7d5abb4..269579d 100644 --- a/snowblocks/bash/config/pkg/history +++ b/snowblocks/bash/config/pkg/history @@ -22,12 +22,6 @@ export HISTSIZE="" # Sets the filesize to be unlimited. export HISTFILESIZE="" -# Creates the log destination folder and sets the filename based on the current date. -if [ ! -d $UMIAQ_HOME/.log ]; then - mkdir $UMIAQ_HOME/.log -fi -HISTFILE=$UMIAQ_HOME/.log/`\date "+%Y-%m-%d"` - # +--------+ # + Format + # +--------+ From 30376bfc973631ccc72e81c66c9f8a344fd2fcd7 Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Wed, 18 Jan 2017 15:23:22 +0100 Subject: [PATCH 019/214] GHI-#5 Ensure .log directory creation only if directory does not exist --- snowblocks/bash/bootstrap | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/snowblocks/bash/bootstrap b/snowblocks/bash/bootstrap index de5a869..d89ea99 100755 --- a/snowblocks/bash/bootstrap +++ b/snowblocks/bash/bootstrap @@ -57,7 +57,9 @@ __snowblock_bash::log_debug() { __snowblock_bash::setup_history() { if [ "$SNOWBLOCK_BASH_HISTORY" = true ]; then - mkdir -p $SNOWBLOCK_BASH_BASE_DIR/.log 2> /dev/null + if [ ! -d $SNOWBLOCK_BASH_BASE_DIR/.log ]; then + mkdir -p $SNOWBLOCK_BASH_BASE_DIR/.log 2> /dev/null + fi export HISTFILE=$SNOWBLOCK_BASH_BASE_DIR/.log/`\date "+%Y-%m-%d"` else export HISTFILE= From d3112cf2eba2bc6abcce4afabeaa272cdb57e076 Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Wed, 18 Jan 2017 15:25:53 +0100 Subject: [PATCH 020/214] Link snowsaw logo banner to GitHub repository --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 45b30dc..caf6837 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@

The snowy dotfile home.

-

Powered by

+

Powered by

--- From de52bd73782a3a67a9381c97ca369443907cf0a1 Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Thu, 19 Jan 2017 12:41:38 +0100 Subject: [PATCH 021/214] GHI-#6 Implement dircolors pkg config to load the color theme --- snowblocks/bash/config/pkg/dircolors | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 snowblocks/bash/config/pkg/dircolors diff --git a/snowblocks/bash/config/pkg/dircolors b/snowblocks/bash/config/pkg/dircolors new file mode 100644 index 0000000..b57a111 --- /dev/null +++ b/snowblocks/bash/config/pkg/dircolors @@ -0,0 +1,14 @@ +#!/usr/bin/env bash +# ++++++++++++++++++++++++++++++++++++++++++++++++++++++ +# title dircolors Configuration + +# project igloo + +# repository https://github.com/arcticicestudio/igloo + +# author Arctic Ice Studio + +# email development@arcticicestudio.com + +# copyright Copyright (C) 2017 + +# ++++++++++++++++++++++++++++++++++++++++++++++++++++++ +# +# [References] +# dircolors(1) +# dir_colors(5) +[[ -e ~/.dir_colors ]] && eval $(dircolors ~/.dir_colors) From 250bb72ecccf14812e54cac915196326eb40dc37 Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Thu, 19 Jan 2017 17:46:48 +0100 Subject: [PATCH 022/214] GHI-#7 Fix filename of local sourced igloo environment configuration --- snowblocks/bash/config/env/igloo | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/snowblocks/bash/config/env/igloo b/snowblocks/bash/config/env/igloo index 8706139..669fb1b 100644 --- a/snowblocks/bash/config/env/igloo +++ b/snowblocks/bash/config/env/igloo @@ -19,13 +19,12 @@ export FZ_DATADIR=$STORE_RUN/filezilla export GIMP2_DIRECTORY=$STORE_RUN/gimp export GRADLE_USER_HOME=$STORE_RUN/gradle export INKSCAPE_PROFILE_DIR=$STORE_RUN/inkscape -export _JAVA_AWT_WM_NONREPARENTING=1 export JAVA_HOME=/usr/lib/jvm/default export M2_REPO=$STORE_RUN/apache-maven-3/repository export PURPLEHOME=$STORE_RUN/pidgin -if [[ -e igloo.env.local ]]; then - . igloo.env.local +if [[ -e igloo.local ]]; then + . igloo.local else unset -v GNUPGHOME fi From ccdf61441fc6300038311bee85d54deee3edc27b Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Thu, 19 Jan 2017 17:50:58 +0100 Subject: [PATCH 023/214] GHI-#8 Move Java environment variable _JAVA_AWT_WM_NONREPARENTING --- snowblocks/bash/config/pkg/java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/snowblocks/bash/config/pkg/java b/snowblocks/bash/config/pkg/java index 69397ee..300307a 100644 --- a/snowblocks/bash/config/pkg/java +++ b/snowblocks/bash/config/pkg/java @@ -50,3 +50,5 @@ # Alternative LCD monitor setting. Same as "lcd", but with different distribution of sub pixels (vertical again but # on other side). export _JAVA_OPTIONS="-Dawt.useSystemAAFontSettings=lcd -Dsun.java2d.xrender=true -Dswing.aatext=true" + +export _JAVA_AWT_WM_NONREPARENTING=1 From 08d27208c62c25dfc774e28b4c1950f34e527275 Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Fri, 20 Jan 2017 09:48:15 +0100 Subject: [PATCH 024/214] GHI-#7 Fix local igloo env config import by using realpath detection --- snowblocks/bash/config/env/igloo | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/snowblocks/bash/config/env/igloo b/snowblocks/bash/config/env/igloo index 669fb1b..ee1880a 100644 --- a/snowblocks/bash/config/env/igloo +++ b/snowblocks/bash/config/env/igloo @@ -23,8 +23,8 @@ export JAVA_HOME=/usr/lib/jvm/default export M2_REPO=$STORE_RUN/apache-maven-3/repository export PURPLEHOME=$STORE_RUN/pidgin -if [[ -e igloo.local ]]; then - . igloo.local +if [ -e $(dirname $(realpath "${BASH_SOURCE[0]}"))/igloo.local ]; then + . $(dirname $(realpath "${BASH_SOURCE[0]}"))/igloo.local else unset -v GNUPGHOME fi From 9a1279899e52ee645026216d8e5f3ded59094871 Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Fri, 20 Jan 2017 09:55:13 +0100 Subject: [PATCH 025/214] GHI-#9 Remove overhead functions --- snowblocks/bash/bootstrap | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/snowblocks/bash/bootstrap b/snowblocks/bash/bootstrap index d89ea99..2c750a3 100755 --- a/snowblocks/bash/bootstrap +++ b/snowblocks/bash/bootstrap @@ -12,16 +12,7 @@ # StackOverflow # (http://stackoverflow.com/questions/592620/check-if-a-program-exists-from-a-bash-script/677212#677212) - -__snowblock_bash::get_bootstrap_link_target() { - printf "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/$(basename "${BASH_SOURCE[0]}")" -} - -__snowblock_bash::get_bootstrap_link_source() { - printf "$(readlink $(__snowblock_bash::get_bootstrap_link_target))" -} - -__snowblock_bash::get_base_dir() { +__snowblock_bash::get_module_realpath() { if hash realpath 2>/dev/null; then printf "$(dirname $(realpath "${BASH_SOURCE[0]}"))" else From 51a34c63ee9a7b9c5bdb2c5efd0a9b23c395741b Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Fri, 20 Jan 2017 09:56:19 +0100 Subject: [PATCH 026/214] GHI-#9 Rewrite boostrap base dir- and module name functions --- snowblocks/bash/bootstrap | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/snowblocks/bash/bootstrap b/snowblocks/bash/bootstrap index 2c750a3..835e9eb 100755 --- a/snowblocks/bash/bootstrap +++ b/snowblocks/bash/bootstrap @@ -14,14 +14,18 @@ __snowblock_bash::get_module_realpath() { if hash realpath 2>/dev/null; then - printf "$(dirname $(realpath "${BASH_SOURCE[0]}"))" + printf "$(realpath "${BASH_SOURCE[0]}")" else - printf "$(dirname $(__snowblock_bash::get_bootstrap_link_source))" + printf "$(readlink "${BASH_SOURCE[0]}")" fi } -__snowblock_bash::get_module_basename() { - printf "$($SNOWBLOCK_BASH_BASE_DIR/$(basename "${BASH_SOURCE[0]}"))" +__snowblock_bash::get_module_name() { + printf "$(basename $(__snowblock_bash::get_module_realpath))" +} + +__snowblock_bash::get_base_dir() { + printf "$(dirname $(__snowblock_bash::get_module_realpath))" } __snowblock_bash::log_error() { @@ -58,7 +62,7 @@ __snowblock_bash::setup_history() { } __snowblock_bash::load_core_modules() { - local __self_name="$(basename $(readlink "${BASH_SOURCE[0]}"))" + local __self_name="$(__snowblock_bash::get_module_name)" if [ "$#" -eq 0 ]; then __snowblock_bash::log_debug "[$__self_name] Missing parameter while calling function $FUNCNAME" @@ -84,7 +88,7 @@ __snowblock_bash::load_core_modules() { } __snowblock_bash::load_third_party_scripts() { - local __self_name="$(basename $(readlink "${BASH_SOURCE[0]}"))" + local __self_name="$(__snowblock_bash::get_module_name)" if [ "$#" -eq 0 ]; then __snowblock_bash::log_debug "[$__self_name] Missing parameter while calling function $FUNCNAME" @@ -122,16 +126,15 @@ export SNOWBLOCK_BASH_BINARIES=$SNOWBLOCK_BASH_BASE_DIR/bin __snowblock_bash::load_core_modules loader/env loader/pkg __snowblock_bash::load_core_modules aliases functions prompt shelloptions -# +--------------------+ -# +Third-Party Scripts + -# +--------------------+ +# +---------------------+ +# + Third-Party Scripts + +# +---------------------+ # Git prompt bash support. __snowblock_bash::load_third_party_scripts /usr/share/git/completion/git-prompt.sh - # Programmable bash completion features. __snowblock_bash::load_third_party_scripts /usr/share/bash-completion/bash_completion __snowblock_bash::setup_history __snowblock_bash::register_binaries -__snowblock_bash::log_debug "[$(basename $(__snowblock_bash::get_bootstrap_link_source))] bootstrap completed" +__snowblock_bash::log_debug "[$(__snowblock_bash::get_module_name)] bootstrap completed" From b20a3cb62cccdb5150f70ff27d38bccaa84a5274 Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Fri, 20 Jan 2017 09:57:11 +0100 Subject: [PATCH 027/214] GHI-#9 Implement realpath- and name functions for each loader module --- snowblocks/bash/core/loader/env | 14 +++++++++++++- snowblocks/bash/core/loader/pkg | 14 +++++++++++++- 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/snowblocks/bash/core/loader/env b/snowblocks/bash/core/loader/env index 3a84426..b86d8c2 100644 --- a/snowblocks/bash/core/loader/env +++ b/snowblocks/bash/core/loader/env @@ -7,8 +7,20 @@ # email development@arcticicestudio.com + # copyright Copyright (C) 2017 + # ++++++++++++++++++++++++++++++++++++++++++++++++++++++ +__snowblock_bash::core::loader::env::get_module_realpath() { + if hash realpath 2>/dev/null; then + printf "$(realpath "${BASH_SOURCE[0]}")" + else + printf "$(readlink "${BASH_SOURCE[0]}")" + fi +} + +__snowblock_bash::core::loader::env::get_module_name() { + printf "$(basename $(__snowblock_bash::core::loader::env::get_module_realpath))" +} + __snowblock_bash::core::loader::env::load() { - local __self_name="$(basename $(basename "${BASH_SOURCE[0]}"))" + local __self_name="$(__snowblock_bash::core::loader::env::get_module_name)" local envs=$(find -L "$SNOWBLOCK_BASH_BASE_DIR/config/env" -maxdepth 1 -not -name "*.local" -type f) local env diff --git a/snowblocks/bash/core/loader/pkg b/snowblocks/bash/core/loader/pkg index be65fea..1a8b9b7 100644 --- a/snowblocks/bash/core/loader/pkg +++ b/snowblocks/bash/core/loader/pkg @@ -7,8 +7,20 @@ # email development@arcticicestudio.com + # copyright Copyright (C) 2017 + # ++++++++++++++++++++++++++++++++++++++++++++++++++++++ +__snowblock_bash::core::loader::pkg::get_module_realpath() { + if hash realpath 2>/dev/null; then + printf "$(realpath "${BASH_SOURCE[0]}")" + else + printf "$(readlink "${BASH_SOURCE[0]}")" + fi +} + +__snowblock_bash::core::loader::pkg::get_module_name() { + printf "$(basename $(__snowblock_bash::core::loader::pkg::get_module_realpath))" +} + __snowblock_bash::core::loader::pkg::load() { - local __self_name="$(basename $(basename "${BASH_SOURCE[0]}"))" + local __self_name="$(__snowblock_bash::core::loader::pkg::get_module_name)" local pkgs=$(find -L "$SNOWBLOCK_BASH_BASE_DIR/config/pkg" -maxdepth 1 -not -name "*.local" -type f) local pkg From f0856f32df1610878737a995d452b915cdff1b9b Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Sun, 22 Jan 2017 20:10:56 +0100 Subject: [PATCH 028/214] GHI-#10 Remove unused env config symlink "illuvigaq" --- snowblocks/bash/config/env/illuvigaq | 1 - 1 file changed, 1 deletion(-) delete mode 120000 snowblocks/bash/config/env/illuvigaq diff --git a/snowblocks/bash/config/env/illuvigaq b/snowblocks/bash/config/env/illuvigaq deleted file mode 120000 index d362f87..0000000 --- a/snowblocks/bash/config/env/illuvigaq +++ /dev/null @@ -1 +0,0 @@ -igloo \ No newline at end of file From d605816dc3eace164fbf2f146f9c4f37e7e0dee5 Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Thu, 26 Jan 2017 20:03:08 +0100 Subject: [PATCH 029/214] GHI-#12 Implement package configuration for "sudo" --- snowblocks/bash/config/pkg/sudo | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 snowblocks/bash/config/pkg/sudo diff --git a/snowblocks/bash/config/pkg/sudo b/snowblocks/bash/config/pkg/sudo new file mode 100644 index 0000000..3a38f1b --- /dev/null +++ b/snowblocks/bash/config/pkg/sudo @@ -0,0 +1,13 @@ +#!/usr/bin/env bash +# ++++++++++++++++++++++++++++++++++++++++++++++++++++++ +# title sudo Configuration + +# project igloo + +# repository https://github.com/arcticicestudio/igloo + +# author Arctic Ice Studio + +# email development@arcticicestudio.com + +# copyright Copyright (C) 2017 + +# ++++++++++++++++++++++++++++++++++++++++++++++++++++++ +# +# [References] +# sudo(8) +export SUDO_PROMPT=$(printf "\e[01;30;47msudo\e[0m \e[36m%%u\e[0m@\e[34m%%h\e[m: ") From 0aecbe39df742970d622cef7f273e757ad6e5590 Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Thu, 26 Jan 2017 20:24:41 +0100 Subject: [PATCH 030/214] GHI-#13 Implement core alias "sbrd" for Spring Boot Remote Debug --- snowblocks/bash/core/aliases | 1 + 1 file changed, 1 insertion(+) diff --git a/snowblocks/bash/core/aliases b/snowblocks/bash/core/aliases index fb89512..4d7abab 100644 --- a/snowblocks/bash/core/aliases +++ b/snowblocks/bash/core/aliases @@ -22,6 +22,7 @@ alias atom-hidpi='atom --force-device-scale-factor=1.5' # +--- java ---+ alias jj='java -jar' +alias sbrd='mvn spring-boot:run -Drun.jvmArguments="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=9999"' # +--- wget ---+ # Disable log file From 803327e2ea051bb4d4cea9c3ce7ea1c296b0f8bf Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Thu, 26 Jan 2017 23:18:54 +0100 Subject: [PATCH 031/214] GHI-#14 Create the makepkg configuration --- snowblocks/pacman/makepkg.conf | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 snowblocks/pacman/makepkg.conf diff --git a/snowblocks/pacman/makepkg.conf b/snowblocks/pacman/makepkg.conf new file mode 100644 index 0000000..707b49e --- /dev/null +++ b/snowblocks/pacman/makepkg.conf @@ -0,0 +1,21 @@ +# ++++++++++++++++++++++++++++++++++++++++++++++++++++++ +# title Pacman makepkg Configuration + +# project igloo + +# repository https://github.com/arcticicestudio/igloo + +# author Arctic Ice Studio + +# email development@arcticicestudio.com + +# copyright Copyright (C) 2017 + +# ++++++++++++++++++++++++++++++++++++++++++++++++++++++ +# +# [References] +# pacman(8) +# makepkg(8) +# makepkg.conf(5) +# Arch Linux +# https://wiki.archlinux.org/index.php/makepkg +# https://wiki.archlinux.org/index.php/pacman + +PACKAGER="Arctic Ice Studio " +PKGDEST=$STORE_PKGS +SRCDEST=/tmp/makepkg +BUILDDIR=/tmp/makepkg/cache From d515b9b307d49d49ac1f4b8c7b87b8bbd83055d4 Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Thu, 26 Jan 2017 23:19:23 +0100 Subject: [PATCH 032/214] GHI-#14 Create the snowblock "bash" package configuration for "pacaur" --- snowblocks/bash/config/pkg/pacaur | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 snowblocks/bash/config/pkg/pacaur diff --git a/snowblocks/bash/config/pkg/pacaur b/snowblocks/bash/config/pkg/pacaur new file mode 100644 index 0000000..5b690c7 --- /dev/null +++ b/snowblocks/bash/config/pkg/pacaur @@ -0,0 +1,16 @@ +#!/usr/bin/env bash +# ++++++++++++++++++++++++++++++++++++++++++++++++++++++ +# title pacaur Configuration + +# project igloo + +# repository https://github.com/arcticicestudio/igloo + +# author Arctic Ice Studio + +# email development@arcticicestudio.com + +# copyright Copyright (C) 2017 + +# ++++++++++++++++++++++++++++++++++++++++++++++++++++++ +# +# [References] +# pacaur(8) +# GitHub Repository +# https://github.com/rmarquis/pacaur + +export AURDEST=/tmp/pacaur/cache From dabd6d2198e8a20226c48707dde1b9b02f8a66eb Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Thu, 26 Jan 2017 23:20:09 +0100 Subject: [PATCH 033/214] GHI-#14 Add new "STORE_PKGS" environment variable --- snowblocks/bash/config/env/igloo | 1 + 1 file changed, 1 insertion(+) diff --git a/snowblocks/bash/config/env/igloo b/snowblocks/bash/config/env/igloo index ee1880a..c5247bb 100644 --- a/snowblocks/bash/config/env/igloo +++ b/snowblocks/bash/config/env/igloo @@ -10,6 +10,7 @@ export LANG=en_US.UTF-8 export LC_MESSAGES=POSIX +export STORE_PKGS=$HOME/store/pool/packages export STORE_RUN=$HOME/store/run export BITFROEST_HOME=$HOME/store/bitfroest From 4e985efd05ac9746fc15e6cd719c5a4e4e7f1847 Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Thu, 26 Jan 2017 23:29:40 +0100 Subject: [PATCH 034/214] GHI-#14 Implement pacman configuration for the "igloo" host --- snowblocks/pacman/pacman.conf.igloo | 91 +++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 snowblocks/pacman/pacman.conf.igloo diff --git a/snowblocks/pacman/pacman.conf.igloo b/snowblocks/pacman/pacman.conf.igloo new file mode 100644 index 0000000..39d4777 --- /dev/null +++ b/snowblocks/pacman/pacman.conf.igloo @@ -0,0 +1,91 @@ +# ++++++++++++++++++++++++++++++++++++++++++++++++++++++ +# title Pacman igloo Configuration + +# project igloo + +# repository https://github.com/arcticicestudio/igloo + +# author Arctic Ice Studio + +# email development@arcticicestudio.com + +# copyright Copyright (C) 2017 + +# ++++++++++++++++++++++++++++++++++++++++++++++++++++++ +# +# [GPG] +# Initialize the local keyring before first using pacman by running "pacman-key --init". +# Populate with the keys of all official Arch Linux packagers by running "pacman-key --populate archlinux". +# +# [References] +# pacman(8) +# pacman.conf(5) +# repo-add(8) +# Arch Linux +# https://wiki.archlinux.org/index.php/pacman +# https://www.archlinux.org/pacman/pacman.8.html +# https://www.archlinux.org/pacman/pacman.conf.5.html +# https://www.archlinux.org/pacman/repo-add.8.html + +# +---------+ +# + Options + +# +---------+ +[options] +# Set the package architecture "i686" or "x86_64" for sync operations. +# The special value "auto" uses the system architecture. +# If unset, no architecture checks are made. +# Packages with the special architecture "any" can always be installed, as they are meant to be architecture +# independent. +Architecture = auto + +# Set the default location of the package cache directory. +# Multiple cache directories can be specified as absolute path and they are tried in the order they are listed. +# If a file is not found in any cache directory, it will be downloaded to the first cache directory with write access. +CacheDir = /var/cache/pacman/pkg/ $STORE_PKGS + +# List packages that should be protected against removement. +# Shell-style glob patterns are allowed. +HoldPkg = pacman glibc + +# Instruct pacman to ignore any upgrades for the specified packages when performing a "--sysupgrade". +# Shell-style glob patterns are allowed. +IgnorePkg = harfbuzz harfbuzz-icu gdk-pixbuf2 + +# Instruct pacman to ignore any upgrades for all packages in the specified groups when performing a "--sysupgrade". +# Shell-style glob patterns are allowed. +IgnoreGroup = + +# Enable tty color support. +Color + +# Perform an approximate check for adequate available disk space before installing packages. +CheckSpace + +# Display name, version and size of target packages formatted as a table for upgrade, sync and remove operations. +VerbosePkgLists + +# Set the default signature verification level. +SigLevel = Required DatabaseOptional + +# Sets the signature verification level for installing packages using the sync "-U" operation on a local file. +# Uses the value from the "SigLevel" options as the default. +LocalFileSigLevel = Optional + +# +--------------+ +# + Repositories + +# +--------------+ +[core] +Include = /etc/pacman.d/mirrorlist + +[extra] +Include = /etc/pacman.d/mirrorlist + +[community] +Include = /etc/pacman.d/mirrorlist + +#[multilib] +#Include = /etc/pacman.d/mirrorlist + +#[community-testing] +#Include = /etc/pacman.d/mirrorlist + +#[multilib-testing] +#Include = /etc/pacman.d/mirrorlist + +[bitfroest] +SigLevel = Optional TrustAll +Server = file:///home/arcticicestudio/store/bitfroest From 476fa211d4d72bb3031017ad8dcd6461ea3d1fc0 Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Thu, 26 Jan 2017 23:30:04 +0100 Subject: [PATCH 035/214] GHI-#14 Implement snowblock configuration file --- snowblocks/pacman/snowblock.json | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 snowblocks/pacman/snowblock.json diff --git a/snowblocks/pacman/snowblock.json b/snowblocks/pacman/snowblock.json new file mode 100644 index 0000000..755ede1 --- /dev/null +++ b/snowblocks/pacman/snowblock.json @@ -0,0 +1,14 @@ +[ + { + "clean": ["~"] + }, + { + "link": { + "~/.makepkg.conf": null, + "~/.pacman.conf": { + "host": ["igloo"], + "path": "pacman.conf.igloo" + } + } + } +] From 0a221275f5d74c133602811d6aa6ba883a661d81 Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Thu, 26 Jan 2017 23:32:26 +0100 Subject: [PATCH 036/214] GHI-#14 Implement "pacman" shorthand alias to pass user configuration --- snowblocks/bash/core/aliases | 3 +++ 1 file changed, 3 insertions(+) diff --git a/snowblocks/bash/core/aliases b/snowblocks/bash/core/aliases index 4d7abab..de369de 100644 --- a/snowblocks/bash/core/aliases +++ b/snowblocks/bash/core/aliases @@ -24,6 +24,9 @@ alias atom-hidpi='atom --force-device-scale-factor=1.5' alias jj='java -jar' alias sbrd='mvn spring-boot:run -Drun.jvmArguments="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=9999"' +# +--- pacman ---+ +alias pacman ='pacman --config ~/.pacman.conf' + # +--- wget ---+ # Disable log file alias wget='wget --hsts-file=' From bab4c03b46cbfdf3d043b3645f46791c81ee77eb Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Thu, 26 Jan 2017 23:34:29 +0100 Subject: [PATCH 037/214] GHI-#14 Fix malformed shell alias "pacman" --- snowblocks/bash/core/aliases | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/snowblocks/bash/core/aliases b/snowblocks/bash/core/aliases index de369de..99828be 100644 --- a/snowblocks/bash/core/aliases +++ b/snowblocks/bash/core/aliases @@ -25,7 +25,7 @@ alias jj='java -jar' alias sbrd='mvn spring-boot:run -Drun.jvmArguments="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=9999"' # +--- pacman ---+ -alias pacman ='pacman --config ~/.pacman.conf' +alias pacman='pacman --config ~/.pacman.conf' # +--- wget ---+ # Disable log file From dad96f29731df1e89f80a97fa249176c070452c0 Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Fri, 27 Jan 2017 21:51:04 +0100 Subject: [PATCH 038/214] GHI-#15 Create core alias "sudo" to fix sudo'ed commands alias expansion --- snowblocks/bash/core/aliases | 3 +++ 1 file changed, 3 insertions(+) diff --git a/snowblocks/bash/core/aliases b/snowblocks/bash/core/aliases index 4d7abab..1f24051 100644 --- a/snowblocks/bash/core/aliases +++ b/snowblocks/bash/core/aliases @@ -35,6 +35,9 @@ alias yta='youtube-dl --extract-audio --audio-format mp3 --audio-quality 0 --aud # +-------+ # + Basic + # +-------+ +# Enable alias expansion for commands run by sudo +alias sudo='sudo ' + # Enable colorized long listing with human-readable size- and ISO-8601 date format. alias ls='LC_COLLATE=C ls -lAh --color=auto --time-style="+%Y-%m-%d +%H:%M:%S" --group-directories-first' From 16b1051a9e6f1290cb5ad90027e2d216de1dc00b Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Fri, 27 Jan 2017 22:07:20 +0100 Subject: [PATCH 039/214] GHI-#14 Create pacman configuration for host "archbook" --- snowblocks/pacman/pacman.conf.archbook | 91 ++++++++++++++++++++++++++ snowblocks/pacman/snowblock.json | 4 ++ 2 files changed, 95 insertions(+) create mode 100644 snowblocks/pacman/pacman.conf.archbook diff --git a/snowblocks/pacman/pacman.conf.archbook b/snowblocks/pacman/pacman.conf.archbook new file mode 100644 index 0000000..3628172 --- /dev/null +++ b/snowblocks/pacman/pacman.conf.archbook @@ -0,0 +1,91 @@ +# ++++++++++++++++++++++++++++++++++++++++++++++++++++++ +# title Pacman archbook Configuration + +# project igloo + +# repository https://github.com/arcticicestudio/igloo + +# author Arctic Ice Studio + +# email development@arcticicestudio.com + +# copyright Copyright (C) 2017 + +# ++++++++++++++++++++++++++++++++++++++++++++++++++++++ +# +# [GPG] +# Initialize the local keyring before first using pacman by running "pacman-key --init". +# Populate with the keys of all official Arch Linux packagers by running "pacman-key --populate archlinux". +# +# [References] +# pacman(8) +# pacman.conf(5) +# repo-add(8) +# Arch Linux +# https://wiki.archlinux.org/index.php/pacman +# https://www.archlinux.org/pacman/pacman.8.html +# https://www.archlinux.org/pacman/pacman.conf.5.html +# https://www.archlinux.org/pacman/repo-add.8.html + +# +---------+ +# + Options + +# +---------+ +[options] +# Set the package architecture "i686" or "x86_64" for sync operations. +# The special value "auto" uses the system architecture. +# If unset, no architecture checks are made. +# Packages with the special architecture "any" can always be installed, as they are meant to be architecture +# independent. +Architecture = auto + +# Set the default location of the package cache directory. +# Multiple cache directories can be specified as absolute path and they are tried in the order they are listed. +# If a file is not found in any cache directory, it will be downloaded to the first cache directory with write access. +CacheDir = /var/cache/pacman/pkg/ $STORE_PKGS + +# List packages that should be protected against removement. +# Shell-style glob patterns are allowed. +HoldPkg = pacman glibc + +# Instruct pacman to ignore any upgrades for the specified packages when performing a "--sysupgrade". +# Shell-style glob patterns are allowed. +IgnorePkg = harfbuzz harfbuzz-icu gdk-pixbuf2 + +# Instruct pacman to ignore any upgrades for all packages in the specified groups when performing a "--sysupgrade". +# Shell-style glob patterns are allowed. +IgnoreGroup = + +# Enable tty color support. +Color + +# Perform an approximate check for adequate available disk space before installing packages. +CheckSpace + +# Display name, version and size of target packages formatted as a table for upgrade, sync and remove operations. +VerbosePkgLists + +# Set the default signature verification level. +SigLevel = Required DatabaseOptional + +# Sets the signature verification level for installing packages using the sync "-U" operation on a local file. +# Uses the value from the "SigLevel" options as the default. +LocalFileSigLevel = Optional + +# +--------------+ +# + Repositories + +# +--------------+ +[core] +Include = /etc/pacman.d/mirrorlist + +[extra] +Include = /etc/pacman.d/mirrorlist + +[community] +Include = /etc/pacman.d/mirrorlist + +#[multilib] +#Include = /etc/pacman.d/mirrorlist + +#[community-testing] +#Include = /etc/pacman.d/mirrorlist + +#[multilib-testing] +#Include = /etc/pacman.d/mirrorlist + +[bitfroest] +SigLevel = Optional TrustAll +Server = file:///home/sgreb/store/bitfroest diff --git a/snowblocks/pacman/snowblock.json b/snowblocks/pacman/snowblock.json index 755ede1..2fc65e4 100644 --- a/snowblocks/pacman/snowblock.json +++ b/snowblocks/pacman/snowblock.json @@ -8,6 +8,10 @@ "~/.pacman.conf": { "host": ["igloo"], "path": "pacman.conf.igloo" + }, + "~/.pacman.conf": { + "host": ["archbook"], + "path": "pacman.conf.archbook" } } } From 62527452c6e6d3bc21e0e4e60e77a48b39e59099 Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Sat, 28 Jan 2017 17:33:06 +0100 Subject: [PATCH 040/214] Update to snowsaw version 0.2.0 This version fixes an important bug with the "hosts" option of the "link" plugin configuration. --- .snowsaw | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.snowsaw b/.snowsaw index 12aa507..82ffb75 160000 --- a/.snowsaw +++ b/.snowsaw @@ -1 +1 @@ -Subproject commit 12aa507d0e2bda01fc30cfcf15a314db6bb25c9d +Subproject commit 82ffb75bcec8576a0fa41164f0a26ec79ea19aad From 1110b92127017fe2e75ef43a5777441860ff3215 Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Sat, 28 Jan 2017 17:35:40 +0100 Subject: [PATCH 041/214] GHI-#14 Update to the new "hosts" option format of snowsaw version 0.2.0 --- snowblocks/pacman/snowblock.json | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/snowblocks/pacman/snowblock.json b/snowblocks/pacman/snowblock.json index 2fc65e4..50f8f11 100644 --- a/snowblocks/pacman/snowblock.json +++ b/snowblocks/pacman/snowblock.json @@ -6,12 +6,10 @@ "link": { "~/.makepkg.conf": null, "~/.pacman.conf": { - "host": ["igloo"], - "path": "pacman.conf.igloo" - }, - "~/.pacman.conf": { - "host": ["archbook"], - "path": "pacman.conf.archbook" + "hosts": { + "igloo": "pacman.conf.igloo", + "archbook": "pacman.conf.archbook" + } } } } From 492b954905fa1d0c19adadda266258e3529dbd93 Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Sun, 29 Jan 2017 20:10:06 +0100 Subject: [PATCH 042/214] Enable mouse support in Vim's GUI mode only --- snowblocks/vim/vimrc | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/snowblocks/vim/vimrc b/snowblocks/vim/vimrc index d1596bc..6fccf4d 100644 --- a/snowblocks/vim/vimrc +++ b/snowblocks/vim/vimrc @@ -147,10 +147,8 @@ colorscheme nord filetype plugin on filetype indent on - set autochdir set binary -set mouse=a set nobackup set nocompatible set noswapfile @@ -162,6 +160,10 @@ set ttyfast set viminfo= set updatetime=250 +if has("gui_running") + set mouse=a +endif + "+----+ "+ UI + "+----+ From 0d0bcdf408cc195ce176aced3ca3a8f7dec0bb88 Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Sun, 29 Jan 2017 20:18:38 +0100 Subject: [PATCH 043/214] Add new "jedi-vim" Vim plugin for python intelligent autocompletion --- snowblocks/vim/vimrc | 1 + 1 file changed, 1 insertion(+) diff --git a/snowblocks/vim/vimrc b/snowblocks/vim/vimrc index 6fccf4d..10b3e15 100644 --- a/snowblocks/vim/vimrc +++ b/snowblocks/vim/vimrc @@ -17,6 +17,7 @@ call plug#begin(expand('~/.vim/plugged')) Plug 'mattn/emmet-vim' Plug 'Yggdroot/indentLine' +Plug 'davidhalter/jedi-vim' Plug 'itchyny/lightline.vim' Plug 'scrooloose/nerdtree' Plug 'Townk/vim-autoclose' From 77b20010abb4d00461723e2cb7c8ecee9c7947e7 Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Sun, 29 Jan 2017 22:03:08 +0100 Subject: [PATCH 044/214] Add EDITOR and VISUAL environment variables for env config "igloo" --- snowblocks/bash/config/env/igloo | 3 +++ 1 file changed, 3 insertions(+) diff --git a/snowblocks/bash/config/env/igloo b/snowblocks/bash/config/env/igloo index c5247bb..ea0f8bd 100644 --- a/snowblocks/bash/config/env/igloo +++ b/snowblocks/bash/config/env/igloo @@ -10,6 +10,9 @@ export LANG=en_US.UTF-8 export LC_MESSAGES=POSIX +export EDITOR="$(command -v vim)" +export VISUAL="$(command -v vim)" + export STORE_PKGS=$HOME/store/pool/packages export STORE_RUN=$HOME/store/run export BITFROEST_HOME=$HOME/store/bitfroest From 57e84f5957ca8f222249ba2e839d94e9d7b496f8 Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Mon, 27 Feb 2017 21:15:44 +0100 Subject: [PATCH 045/214] GHI-#16 Add the "pastetoggle" option mapped to the "F3" key --- snowblocks/vim/vimrc | 1 + 1 file changed, 1 insertion(+) diff --git a/snowblocks/vim/vimrc b/snowblocks/vim/vimrc index 10b3e15..c103f20 100644 --- a/snowblocks/vim/vimrc +++ b/snowblocks/vim/vimrc @@ -148,6 +148,7 @@ colorscheme nord filetype plugin on filetype indent on +set pastetoggle= set autochdir set binary set nobackup From 6b0f8e2b565e013339b3c1b91fc94e5fbb4c11b5 Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Sun, 23 Apr 2017 20:18:22 +0200 Subject: [PATCH 046/214] GHI-#17 Autodetect installed Ruby gem version paths --- snowblocks/bash/config/env/igloo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/snowblocks/bash/config/env/igloo b/snowblocks/bash/config/env/igloo index ea0f8bd..cc05347 100644 --- a/snowblocks/bash/config/env/igloo +++ b/snowblocks/bash/config/env/igloo @@ -33,8 +33,8 @@ else unset -v GNUPGHOME fi +PATH_RUBY_GEMS=($HOME/.gem/ruby/*/bin);PATH_RUBY_GEMS=$(printf "%s:" "${PATH_RUBY_GEMS[@]}") PATH_NPM_PACKAGES=$STORE_RUN/npm/bin -PATH_RUBY_GEMS="$HOME/.gem/ruby/2.2.0/bin;$HOME/.gem/ruby/2.3.0/bin" PATH_INTELLIJ_IDEA_U_HOME=/opt/intellij-idea-u/bin PATH_GIT_DIFF_HIGHLIGHT=/usr/share/git/diff-highlight export PATH="${PATH}:$JAVA_HOME/bin:$PATH_NPM_PACKAGES:$PATH_RUBY_GEMS:$PATH_ANI2ICO:$PATH_INTELLIJ_IDEA_U_HOME:$PATH_GIT_DIFF_HIGHLIGHT" From 64153ed66b9f2ff887d34d725816b19ec15a6c83 Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Sun, 23 Apr 2017 20:23:23 +0200 Subject: [PATCH 047/214] GHI-#18 Implement package configuration for gulp --- snowblocks/bash/config/pkg/gulp | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 snowblocks/bash/config/pkg/gulp diff --git a/snowblocks/bash/config/pkg/gulp b/snowblocks/bash/config/pkg/gulp new file mode 100644 index 0000000..35e44f5 --- /dev/null +++ b/snowblocks/bash/config/pkg/gulp @@ -0,0 +1,18 @@ +#!/usr/bin/env bash +# +++++++++++++++++++++++++++++++++++++++++++++++++++++ +# title gulp Configuration + +# project igloo + +# repository https://github.com/arcticicestudio/igloo + +# author Arctic Ice Studio + +# email development@arcticicestudio.com + +# copyright Copyright (C) 2017 + +# +++++++++++++++++++++++++++++++++++++++++++++++++++++ +# +# [References] +# gulp +# http://gulpjs.com +# https://github.com/gulpjs/gulp-cli#completion +# https://github.com/gulpjs/gulp +# gulp() + +eval "$(gulp --completion=bash)" From 2696ed05d0f6210f96f47bd8ff07efe22b278a05 Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Fri, 5 May 2017 08:24:49 +0200 Subject: [PATCH 048/214] GHI-#19 Clean up Java package config docs --- snowblocks/bash/config/pkg/java | 47 +++++++++++++++------------------ 1 file changed, 22 insertions(+), 25 deletions(-) diff --git a/snowblocks/bash/config/pkg/java b/snowblocks/bash/config/pkg/java index 300307a..b797dce 100644 --- a/snowblocks/bash/config/pkg/java +++ b/snowblocks/bash/config/pkg/java @@ -9,11 +9,13 @@ # ++++++++++++++++++++++++++++++++++++++++++++++++++++++ # # [References] -# StackOverflow -# (http://stackoverflow.com/questions/28327620/difference-between-java-options-java-tool-options-and-java-opts) +# Arch Linux +# (https://wiki.archlinux.org/index.php/Java_Runtime_Environment_fonts) # Oracle JDK 8 # (http://docs.oracle.com/javase/8/docs/technotes/guides/2d/flags.html#aaFonts) # (http://docs.oracle.com/javase/8/docs/technotes/guides/2d/flags.html#xrender) +# StackOverflow +# (http://stackoverflow.com/questions/28327620/difference-between-java-options-java-tool-options-and-java-opts) # NetBeans Wiki # (http://wiki.netbeans.org/FaqFontRendering) # java(1) @@ -21,34 +23,29 @@ # Sets the default system-wide JVM options. # -# "-Dawt.useSystemAAFontSettings" +# awt.useSystemAAFontSettings # Use system settings for font anti-aliasing. -# "-Dsun.java2d.xrender" -# Enable the XRender-based Java 2D rendering pipeline for modern X11-based desktops, offering improved graphics -# performance. -# "-Dswing.aatext" +# sun.java2d.xrender +# Enable the XRender-based Java 2D rendering pipeline for modern X11-based desktops, offering improved graphics performance. +# swing.aatext # Enable the font anti-aliasing for Swing-based applications. # # Constant names in braces are values for the "java.awt.RenderingHint" class. # # > awt.useSystemAAFontSettings -# "off" | "false" | "default" ("VALUE_TEXT_ANTIALIAS_DEFAULT") -# No anti-aliasing. -# "on" ("VALUE_TEXT_ANTIALIAS_ON") -# Full anti-aliasing without sub-pixel rendering -# "gasp" ("VALUE_TEXT_ANTIALIAS_GASP") -# Use the font's built-in hinting instructions with sub-pixel rendering, intended for use both on CRT and LCD . -# "lcd" | "lcd_hrgb" ("VALUE_TEXT_ANTIALIAS_LCD_HRGB") -# Anti-aliasing tuned for many popular LCD monitors with sub-pixel rendering, optimized for LCD. -# "lcd_hbgr" ("VALUE_TEXT_ANTIALIAS_LCD_HBGR") -# Alternative LCD monitor setting. Same as "lcd", but with different distribution of sub pixels (monitor upside -# down). -# "lcd_vrgb" ("VALUE_TEXT_ANTIALIAS_LCD_VRGB") -# Alternative LCD monitor setting. Same as "lcd", but with different distribution of sub pixels (monitor is -# vertical). -# "lcd_vbgr" ("VALUE_TEXT_ANTIALIAS_LCD_VBGR") -# Alternative LCD monitor setting. Same as "lcd", but with different distribution of sub pixels (vertical again but -# on other side). +# - off,false,default (VALUE_TEXT_ANTIALIAS_DEFAULT) +# No anti-aliasing. +# - on (VALUE_TEXT_ANTIALIAS_ON) +# Full anti-aliasing without sub-pixel rendering +# - gasp (VALUE_TEXT_ANTIALIAS_GASP) +# Use the font's built-in hinting instructions with sub-pixel rendering, intended for use both on CRT and LCD . +# - lcd, lcd_hrgb (VALUE_TEXT_ANTIALIAS_LCD_HRGB) +# Anti-aliasing tuned for many popular LCD monitors with sub-pixel rendering, optimized for LCD. +# - lcd_hbgr (VALUE_TEXT_ANTIALIAS_LCD_HBGR) +# Alternative LCD monitor setting. Same as "lcd", but with different distribution of sub pixels (monitor upsidedown). +# - lcd_vrgb (VALUE_TEXT_ANTIALIAS_LCD_VRGB) +# Alternative LCD monitor setting. Same as "lcd", but with different distribution of sub pixels (monitor is vertical). +# - lcd_vbgr (VALUE_TEXT_ANTIALIAS_LCD_VBGR) +# Alternative LCD monitor setting. Same as "lcd", but with different distribution of sub pixels (vertical again but on other side). export _JAVA_OPTIONS="-Dawt.useSystemAAFontSettings=lcd -Dsun.java2d.xrender=true -Dswing.aatext=true" - export _JAVA_AWT_WM_NONREPARENTING=1 From dc6be167c8005c6ce887536502b65108042dd566 Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Tue, 1 Aug 2017 12:21:58 +0200 Subject: [PATCH 049/214] Add conditional includes The change allows to include the main- and job authentication configs based on the current path of the repository. References: https://git-scm.com/docs/git-config#_includes https://github.com/blog/2360-git-2-13-has-been-released GH-23 --- snowblocks/git/gitconfig | 45 +++++++++++++++++++++++++++------------- 1 file changed, 31 insertions(+), 14 deletions(-) diff --git a/snowblocks/git/gitconfig b/snowblocks/git/gitconfig index de25c9c..a1dc4b0 100755 --- a/snowblocks/git/gitconfig +++ b/snowblocks/git/gitconfig @@ -1,25 +1,42 @@ -# ++++++++++++++++++++++++++++++++++++++++++++++++++++++ -# title Git Configuration + -# project igloo + -# repository https://github.com/arcticicestudio/igloo + -# author Arctic Ice Studio + -# email development@arcticicestudio.com + -# copyright Copyright (C) 2017 + -# ++++++++++++++++++++++++++++++++++++++++++++++++++++++ +# +++++++++++++++++++++++++++++++++++++++++++++++++++++ +# title Git Configuration + +# project igloo + +# repository https://github.com/arcticicestudio/igloo + +# author Arctic Ice Studio + +# email development@arcticicestudio.com + +# copyright Copyright (C) 2017 + +# +++++++++++++++++++++++++++++++++++++++++++++++++++++ # # [References] # Git -# (https://git-scm.com/docs/git-config) -# (https://git-scm.com/book/tr/v2/Customizing-Git-Git-Configuration#Colors-in-Git) +# https://git-scm.com/docs/git-config +# https://git-scm.com/book/tr/v2/Customizing-Git-Git-Configuration#_colors_in_git +# https://git-scm.com/docs/git-config#_conditional_includes # diff-so-fancy -# (https://github.com/so-fancy/diff-so-fancy#options) -[include] - # Includes sensible authentication data: +# https://github.com/so-fancy/diff-so-fancy#options + +[includeIf "gitdir:~/yggdrasil/"] + path = ~/.gitconfig_auth + +[includeIf "gitdir:~/code/bitbucket/"] + path = ~/.gitconfig_auth + +[includeIf "gitdir:~/code/bitfroest/"] + path = ~/.gitconfig_auth + +[includeIf "gitdir:~/code/github/"] + path = ~/.gitconfig_auth + +[includeIf "gitdir:~/.igloo/"] + path = ~/.gitconfig_auth + + # Includes sensible job authentication data: # - user.name # - user.email # - user.signingkey # - user.useconfigonly true - path = ~/.gitconfig_auth +[includeIf "gitdir:~/code/job/"] + path = ~/.gitconfig_auth_job [core] repositoryFormatVersion = 0 From f304e0cadcb2927aa337d663d9ab80ba89acadd0 Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Tue, 1 Aug 2017 12:24:28 +0200 Subject: [PATCH 050/214] Add job specific authentication data config GH-23 --- .gitignore | 2 +- snowblocks/git/gitconfig_auth | 5 +++++ snowblocks/git/snowblock.json | 1 + 3 files changed, 7 insertions(+), 1 deletion(-) create mode 100644 snowblocks/git/gitconfig_auth diff --git a/.gitignore b/.gitignore index 6af0130..7a2d608 100644 --- a/.gitignore +++ b/.gitignore @@ -7,4 +7,4 @@ snowblocks/bash/.log # +--- git ---+ -snowblocks/git/gitconfig_auth +snowblocks/git/gitconfig_auth_job diff --git a/snowblocks/git/gitconfig_auth b/snowblocks/git/gitconfig_auth new file mode 100644 index 0000000..a5ed0d6 --- /dev/null +++ b/snowblocks/git/gitconfig_auth @@ -0,0 +1,5 @@ +[user] + name = Arctic Ice Studio + email = development@arcticicestudio.com + signingkey = + useconfigonly = true diff --git a/snowblocks/git/snowblock.json b/snowblocks/git/snowblock.json index b5feecd..dad4e36 100644 --- a/snowblocks/git/snowblock.json +++ b/snowblocks/git/snowblock.json @@ -7,6 +7,7 @@ "~/.git-commit-msg": null, "~/.gitconfig": null, "~/.gitconfig_auth": null, + "~/.gitconfig_auth_job": null, "~/.gitignore": null } } From f138623650f540f577af641c2f15b1e38467be4a Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Wed, 2 Aug 2017 06:16:49 +0200 Subject: [PATCH 051/214] Simplify branch printing aliases# The branch printing aliases "b" and the extended aliases "bum" and "bm" have been simplified by removing unnecessary flags. * The "--list" flag should be used to list branches matching a specific pattern * The "-v"/"-vv"/"--verbose" flags which shows the commit SHA1 and subject line after each branch has been removed GH-25 --- snowblocks/git/gitconfig | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/snowblocks/git/gitconfig b/snowblocks/git/gitconfig index de25c9c..0bc12f8 100755 --- a/snowblocks/git/gitconfig +++ b/snowblocks/git/gitconfig @@ -331,25 +331,21 @@ # # Usage: # git b - # Output Format: - # - b = branch --list --all -v + b = branch --all # Prints only branches that have not been merged yet into the specified branch. + # If no BRANCH is specified, the current branch is used by default. # # Usage: - # git bum - # Output Format: - # - bum = branch --all --list --verbose --no-merged + # git bum [BRANCH] + bum = branch --all --no-merged # Prints only branches that have been merged into the specified branch. + # If no BRANCH is specified, the current branch is used by default. # # Usage: - # git bm - # Output Format: - # - bm = branch --all --list --verbose --merged + # git bm [BRANCH] + bm = branch --all --merged # +-------------------+ # + Information - Log + From 6b95139fbdfb766bd2c460cb8f7ea90cb9159373 Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Wed, 2 Aug 2017 14:53:13 +0200 Subject: [PATCH 052/214] Improve logging alias formats * The defined ASCII colors codes for the output have been changed to adapt to the terminal colors theme/scheme. * The format has been simplified and minimized/reduced to relevant information except the extended "ll" and "llf" aliases. * Added the shorthand aliases "lf" and "llf" for a flattened output without topic commits from merges and adapted the style to the existing "lnew" and "lch" aliases. * The "lr" alias is superfluous and has been removed due to the new "ll" and "llf" aliases which include the relative date of a commit. GH-24 --- snowblocks/git/gitconfig | 64 +++++++++++++++++++--------------------- 1 file changed, 31 insertions(+), 33 deletions(-) diff --git a/snowblocks/git/gitconfig b/snowblocks/git/gitconfig index de25c9c..18206ae 100755 --- a/snowblocks/git/gitconfig +++ b/snowblocks/git/gitconfig @@ -354,54 +354,56 @@ # +-------------------+ # + Information - Log + # +-------------------+ - # Lists an advanced commit log. + # Prints a prettified commit log. # # Usage: # git l # Output Format: - # [REFS] - # <> - # - # - l = log --pretty=format:'%C(74 bold ul)%H%C(reset)%C(86 bold)%d\n%C(80)%an %C(248)<%C(80)%ae%C(248)>\n%C(68)%ci\n%C(253)%B' --graph + # + l = log --graph --pretty=format:'%C(cyan)%h %C(white)%s %C(cyan bold)%d' - # Lists the log for all commits commited after the given tag or SHA1 checksum. + # Prints a prettified flat commit log without topic commits from merges. # # Depends on: # alias.l # Usage: - # git lch | - # Output Format: - # [REFS] - # <> - # - # - lch = ! git l $1..HEAD + # git lf + lf = ! git l --first-parent - # Lists an advanced commit log with relative commit dates. + # Prints a extended and prettified commit log graph. # # Usage: - # git lr + # git ll # Output Format: - # [REFS] - # <> - # - # - lr = log --pretty=format:'%C(74 bold ul)%H%C(reset)%C(86 bold)%d\n%C(80)%an %C(248)<%C(80)%ae%C(248)>\n%C(68)%cr\n%C(253)%B' --graph + # [REFS] + # + # () + # + ll = log --graph --pretty=format:'%C(cyan ul)%H%C(reset) %C(cyan bold)%d\n%C(blue bold)%an %C(black)<%C(blue)%ae%C(black)>\n%C(black bold)%ci (%C(black bold)%cr)\n%C(white)%B' + + # Prints a prettified flat commit log graph without topic commits from merges. + # + # Depends on: + # alias.ll + # Usage: + # git llf + llf = ! git ll --first-parent - # Lists all new commits after the fetch including stats, but excluding merges. + # Lists the log for all commits commited after the given tag or SHA1. + # + # Depends on: + # alias.l + # Usage: + # git lch | + lch = ! git l $1..HEAD + + # Lists all new commits after the fetch including stats. # # Depends on: # alias.l # Usage: # git lnew - # Output Format: - # [REFS] - # <> - # - # - # - lnew = ! git l ORIG_HEAD.. --stat --no-merges + lnew = ! git l ORIG_HEAD.. --stat # +----------------------+ # + Information - Status + @@ -447,7 +449,3 @@ # Usage: # git ft ft = ! git describe --tags --contains $1 - - cc = "!f() { \ - git log --decorate --date=short -S\"$1\"; \ - }; f" From fb72bb851da96aa412fcf767b4a80a44d4609afb Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Wed, 2 Aug 2017 15:07:59 +0200 Subject: [PATCH 053/214] Automatically wrap left and right Allows to move the cursor to the previous/next line after reaching first/last character in the line using the arrow keys in normal-, insert- (<,>) and visual mode ([,]) or the h and l keys. References: :help whichwrap GH-22 --- snowblocks/vim/vimrc | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/snowblocks/vim/vimrc b/snowblocks/vim/vimrc index c103f20..f726ab1 100644 --- a/snowblocks/vim/vimrc +++ b/snowblocks/vim/vimrc @@ -1,15 +1,15 @@ -" ++++++++++++++++++++++++++++++++++++++++++++++++++++++ -" title Vim Configuration + -" project igloo + -" repository https://github.com/arcticicestudio/igloo + -" author Arctic Ice Studio + -" email development@arcticicestudio.com + -" copyright Copyright (C) 2017 + -" ++++++++++++++++++++++++++++++++++++++++++++++++++++++ +" +++++++++++++++++++++++++++++++++++++++++++++++++++++ +" title Vim Configuration + +" project igloo + +" repository https://github.com/arcticicestudio/igloo + +" author Arctic Ice Studio + +" email development@arcticicestudio.com + +" copyright Copyright (C) 2017 + +" +++++++++++++++++++++++++++++++++++++++++++++++++++++ " " [References] " Google Style Guide -" (https://google.github.io/styleguide/vimscriptguide.xml) +" https://google.github.io/styleguide/vimscriptguide.xml "+---------+ "+ Plugins + @@ -211,7 +211,10 @@ set smarttab set softtabstop=2 set tabstop=2 set textwidth=160 -set whichwrap+=<,>,h,l + +" Automatically wrap left and right. +" This allows to move the cursor to the previous/next line after reaching first/last character in the line using the arrow keys in normal-, insert- (<,>) and visual mode ([,]) or the h and l keys. +set whichwrap+=<,>,h,l,[,] set wrap "+--- Search ---+ From eafb18b91f7bbf0dfaaa3c251b74e1b2532aa5f4 Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Wed, 2 Aug 2017 15:15:11 +0200 Subject: [PATCH 054/214] Add line- and block move key mappings The key mapping allows to easily move the current line or selected block(s) using the "Ctrl" and the "up" and "down" keys. * The moved line/block adapts to to the new indentation. * The key mappings are available in the NORMAL, INSERT and VISUAL modes GH-21 --- snowblocks/vim/vimrc | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/snowblocks/vim/vimrc b/snowblocks/vim/vimrc index c103f20..becd819 100644 --- a/snowblocks/vim/vimrc +++ b/snowblocks/vim/vimrc @@ -140,6 +140,17 @@ map l map :NERDTreeToggle +" Moves the current line or selected block(s) up- or down by one line. +" +" In normal -and insert mode the "==" re-indents the moved line to suit its new position. +" In visual mode "gv" reselects the last visual block while the "=" re-indents that block using the preassigned "'>" mark to identify the selection end. +nnoremap :m+== +nnoremap :m-2== +inoremap :m+==gi +inoremap :m-2==gi +vnoremap :m '>+1gv=gv +vnoremap :m '<-2gv=gv + "+---------------+ "+ Configuration + "+---------------+ From 554f0438721dd99660e13eb3473d8b62f1d46123 Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Thu, 3 Aug 2017 12:07:54 +0200 Subject: [PATCH 055/214] Enable sign column auto toggle Vim 8 introduced a new option to configure the state of the sign column to be always visible ("yes"), always hidden ("no") or to automatically toggle ("auto") when there are signs available to display. This change is related to the warning message added to "airblade/vim-gitgutter@dc73a81" which also advises to remove the custom option "g:gitgutter_sign_column_always = 1" and use "set signcolumn = auto" instead, described by the plugin owner in "airblade/vim-gitgutter#431" "https://github.com/airblade/vim-gitgutter/issues/431#issuecomment-319696108). References: :help signcolumn GH-32 --- snowblocks/vim/vimrc | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/snowblocks/vim/vimrc b/snowblocks/vim/vimrc index 608f87b..49f2666 100644 --- a/snowblocks/vim/vimrc +++ b/snowblocks/vim/vimrc @@ -100,7 +100,6 @@ function! LightlineFilename() endfunction "+--- airblade/vim-gitgutter ---+ -let g:gitgutter_sign_column_always = 1 let g:gitgutter_realtime = 1 let g:gitgutter_eager = 1 @@ -217,6 +216,9 @@ set magic set mat=2 set shiftwidth=2 set showmatch + +" Toggle the sign column automatically when there are signs available to display. +set signcolumn=auto set smartindent set smarttab set softtabstop=2 From 53b428a2c4234230214df7a8847d136263fab647 Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Tue, 15 Aug 2017 14:11:45 +0200 Subject: [PATCH 056/214] Everyone loves candies! Enable pacman "candy eating mode" for progress bars via "ILoveCandy" config boolean. See "conf.c" (https://git.archlinux.org/pacman.git/tree/src/pacman/conf.c#n483) in pacman source code. References: https://www.archlinux.org/pacman/ GH-34 --- snowblocks/pacman/pacman.conf.archbook | 3 +++ snowblocks/pacman/pacman.conf.igloo | 3 +++ 2 files changed, 6 insertions(+) diff --git a/snowblocks/pacman/pacman.conf.archbook b/snowblocks/pacman/pacman.conf.archbook index 3628172..c154a7d 100644 --- a/snowblocks/pacman/pacman.conf.archbook +++ b/snowblocks/pacman/pacman.conf.archbook @@ -52,6 +52,9 @@ IgnoreGroup = # Enable tty color support. Color +# Everyone loves candies! +ILoveCandy + # Perform an approximate check for adequate available disk space before installing packages. CheckSpace diff --git a/snowblocks/pacman/pacman.conf.igloo b/snowblocks/pacman/pacman.conf.igloo index 39d4777..8a432e5 100644 --- a/snowblocks/pacman/pacman.conf.igloo +++ b/snowblocks/pacman/pacman.conf.igloo @@ -52,6 +52,9 @@ IgnoreGroup = # Enable tty color support. Color +# Everyone loves candies! +ILoveCandy + # Perform an approximate check for adequate available disk space before installing packages. CheckSpace From c823193f5060ee9d282f9478faaf76affc2bec4d Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Mon, 30 Oct 2017 11:36:15 +0100 Subject: [PATCH 057/214] Remap syntax highlighting function The mapping for the function to show the syntax highlighting groups for the current cursor position collides with the AUR package "plotinus-git" (1) which provides a searchable command palette in every modern GTK+ application. Is uses the commonly known "Control + Shift + P" key mapping. The used terminal emulator "tilix" (2) is a GTK3 application so the command bar is available and has a higher priority as the mapping for the function. This commit changes the key mapping for the function to use the "K" key instead of "P". References: (1) https://aur.archlinux.org/packages/plotinus-git (2) https://github.com/gnunn1/tilix GH-36 --- snowblocks/vim/vimrc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/snowblocks/vim/vimrc b/snowblocks/vim/vimrc index 49f2666..801b4cf 100644 --- a/snowblocks/vim/vimrc +++ b/snowblocks/vim/vimrc @@ -240,7 +240,7 @@ set incsearch "+ Functions + "+-----------+ " Shows syntax highlighting groups for the current cursor position -nmap :call SynStack() +nmap :call SynStack() function! SynStack() if !exists("*synstack") return From f4172a1ccdd5dcacc6cfce629cca35fc07e70184 Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Mon, 30 Oct 2017 11:42:18 +0100 Subject: [PATCH 058/214] Enable 24bit true color support This commit sets the "termguicolors" option to enable support for 24bit true colors (1). This is necessary to use the Nord Vim "Custom Comment Brightness" (2) theme feature which makes use of HEX defined colors. References: (1) https://gist.github.com/XVilka/8346728 (2) https://github.com/arcticicestudio/nord-vim#comment-contrast GH-37 --- snowblocks/vim/vimrc | 1 + 1 file changed, 1 insertion(+) diff --git a/snowblocks/vim/vimrc b/snowblocks/vim/vimrc index 49f2666..013d378 100644 --- a/snowblocks/vim/vimrc +++ b/snowblocks/vim/vimrc @@ -185,6 +185,7 @@ set guioptions-=m set guioptions-=T set guioptions-=r set guioptions-=L +set termguicolors set hidden set laststatus=2 set lazyredraw From 711a5c4a0fe0e02cc054f775ac17675fcbeaa2ba Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Mon, 30 Oct 2017 11:49:27 +0100 Subject: [PATCH 059/214] Add Markdown plugin plasticboy/vim-markdown The "plasticboy/vim-markdown" (1) extends the syntax highlighting support and provides additional features compared to the default syntax definitions. References: (1) https://github.com/plasticboy/vim-markdown GH-38 --- snowblocks/vim/vimrc | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/snowblocks/vim/vimrc b/snowblocks/vim/vimrc index 49f2666..9ab9f26 100644 --- a/snowblocks/vim/vimrc +++ b/snowblocks/vim/vimrc @@ -15,23 +15,29 @@ "+ Plugins + "+---------+ call plug#begin(expand('~/.vim/plugged')) +"+--- IDE / Workflow ---+ Plug 'mattn/emmet-vim' -Plug 'Yggdroot/indentLine' Plug 'davidhalter/jedi-vim' +Plug 'Townk/vim-autoclose' +Plug 'tpope/vim-fugitive' +if v:version >= 704 + Plug 'honza/vim-snippets' + Plug 'SirVer/ultisnips' +endif + +"+--- UI ---+ +Plug 'Yggdroot/indentLine' Plug 'itchyny/lightline.vim' Plug 'scrooloose/nerdtree' -Plug 'Townk/vim-autoclose' Plug 'gorodinskiy/vim-coloresque' -Plug 'tpope/vim-fugitive' Plug 'airblade/vim-gitgutter' + +"+--- Syntax ---+ Plug 'pangloss/vim-javascript' +Plug 'plasticboy/vim-markdown' +"+--- Color Themes ---+ Plug 'arcticicestudio/nord-vim' - -if v:version >= 704 - Plug 'honza/vim-snippets' - Plug 'SirVer/ultisnips' -endif call plug#end() "+--- Yggdroot/indentLine ---+ From 603dc54fe6ff1bbe16ae2dbacff6d46e0afbdc8b Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Mon, 30 Oct 2017 13:55:08 +0100 Subject: [PATCH 060/214] Replace unmaintained vim-coloresque plugin The "gko/vim-coloresque" (1) plugin is not actively developed and conflicts with other plugins. It should be replaced with the "ap/vim-css-color" (2) plugin which is a fork of the same base repository. References: (1) https://github.com/gko/vim-coloresque (2) https://github.com/ap/vim-css-color GH-42 --- snowblocks/vim/vimrc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/snowblocks/vim/vimrc b/snowblocks/vim/vimrc index 0ff9770..7b4a380 100644 --- a/snowblocks/vim/vimrc +++ b/snowblocks/vim/vimrc @@ -29,7 +29,7 @@ endif Plug 'Yggdroot/indentLine' Plug 'itchyny/lightline.vim' Plug 'scrooloose/nerdtree' -Plug 'gorodinskiy/vim-coloresque' +Plug 'ap/vim-css-color' Plug 'airblade/vim-gitgutter' "+--- Syntax ---+ From d3064b6cfacb196229e180bd3cf797e887c6b09a Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Mon, 30 Oct 2017 16:41:23 +0100 Subject: [PATCH 061/214] Add vim-livedown The "shime/vim-livedown" (1) plugin adds support for "Livedown" (2) (Live Markdown Previews) for Vim. It requires the "livedown" (3) NPM to be globally available! The plugin has been configured to open the browser on preview, running on port 1337. References: (1) https://github.com/shime/vim-livedown (2) https://github.com/shime/livedown (3) https://www.npmjs.com/package/livedown GH-45 --- snowblocks/vim/vimrc | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/snowblocks/vim/vimrc b/snowblocks/vim/vimrc index 0ff9770..1b6b675 100644 --- a/snowblocks/vim/vimrc +++ b/snowblocks/vim/vimrc @@ -20,6 +20,7 @@ Plug 'mattn/emmet-vim' Plug 'davidhalter/jedi-vim' Plug 'Townk/vim-autoclose' Plug 'tpope/vim-fugitive' +Plug 'shime/vim-livedown' if v:version >= 704 Plug 'honza/vim-snippets' Plug 'SirVer/ultisnips' @@ -114,6 +115,13 @@ let g:javascript_enable_domhtmlcss = 1 let g:javascript_plugin_jsdoc = 1 let g:javascript_plugin_flow = 1 +"+--- shime/vim-livedown ---+ +" Automatically show the preview upon opening Markdown buffer +let g:livedown_autorun = 0 +" Open the browser window upon previewing +let g:livedown_open = 1 +let g:livedown_port = 1337 + "+--- SirVer/ultisnips ---+ let g:UltiSnipsExpandTrigger="" let g:UltiSnipsJumpForwardTrigger="" From ccd3ee8430b8f4c67f92553df7eb54da73fd1d40 Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Mon, 30 Oct 2017 14:19:40 +0100 Subject: [PATCH 062/214] Add JSX syntax plugin The "mxw/vim-jsx" (1) plugin adds syntax highlighting and indenting support for JSX. It is not a standalone JavaScript plugin and must be used with a base JS highlighter and integrates with the currently used and recommended "pangloss/vim-javascript" (2) plugin (vim-jsx's "official" dependency). The "g:jsx_ext_required" is set to "0" to also enable JSX synta highlighting in ".js" files. References: (1) https://github.com/mxw/vim-jsx (2) https://github.com/pangloss/vim-javascript GH-44 --- snowblocks/vim/vimrc | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/snowblocks/vim/vimrc b/snowblocks/vim/vimrc index 0ff9770..0e28142 100644 --- a/snowblocks/vim/vimrc +++ b/snowblocks/vim/vimrc @@ -34,6 +34,7 @@ Plug 'airblade/vim-gitgutter' "+--- Syntax ---+ Plug 'pangloss/vim-javascript' +Plug 'mxw/vim-jsx' Plug 'plasticboy/vim-markdown' "+--- Color Themes ---+ @@ -114,6 +115,9 @@ let g:javascript_enable_domhtmlcss = 1 let g:javascript_plugin_jsdoc = 1 let g:javascript_plugin_flow = 1 +"+--- mxw/vim-jsx ---+ +let g:jsx_ext_required = 0 + "+--- SirVer/ultisnips ---+ let g:UltiSnipsExpandTrigger="" let g:UltiSnipsJumpForwardTrigger="" From d77957539a12d897163fb266c8927d637b9f0203 Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Tue, 31 Oct 2017 09:42:41 +0100 Subject: [PATCH 063/214] Remove ignored pacman packages The * harfbuzz * harfbuzz-icu * gdk-pixbuf2 packages has been added to the pacman ignore list to fix the harfbuzz + Infinality issue (1) which caused broken font rendering & boot failures on most systems due to incompatibility with the updated "freetype2" package, which superseded the infinality-bundle. These packages should now be removed from the ignore list since the issues have already been fixed some days after the issue occurred. References: (1) https://gist.github.com/cryzed/e002e7057435f02cc7894b9e748c5671 GH-49 --- snowblocks/pacman/pacman.conf.igloo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/snowblocks/pacman/pacman.conf.igloo b/snowblocks/pacman/pacman.conf.igloo index 8a432e5..7346556 100644 --- a/snowblocks/pacman/pacman.conf.igloo +++ b/snowblocks/pacman/pacman.conf.igloo @@ -43,7 +43,7 @@ HoldPkg = pacman glibc # Instruct pacman to ignore any upgrades for the specified packages when performing a "--sysupgrade". # Shell-style glob patterns are allowed. -IgnorePkg = harfbuzz harfbuzz-icu gdk-pixbuf2 +IgnorePkg = # Instruct pacman to ignore any upgrades for all packages in the specified groups when performing a "--sysupgrade". # Shell-style glob patterns are allowed. From e9646449ffbe506dfb36010784adec6cefbe3fae Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Tue, 31 Oct 2017 09:51:29 +0100 Subject: [PATCH 064/214] Use long GPG keyid format for Git configuration References: (1) https://www.gnupg.org/documentation/manuals/gnupg/GPG-Configuration-Options.html GH-50 --- snowblocks/git/gitconfig_auth | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/snowblocks/git/gitconfig_auth b/snowblocks/git/gitconfig_auth index a5ed0d6..55f85fb 100644 --- a/snowblocks/git/gitconfig_auth +++ b/snowblocks/git/gitconfig_auth @@ -1,5 +1,5 @@ [user] name = Arctic Ice Studio email = development@arcticicestudio.com - signingkey = + signingkey = 60C54F1519346085 useconfigonly = true From 734c2aff20b2f91d55336758dd7cb7e20cec23a6 Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Tue, 31 Oct 2017 10:05:07 +0100 Subject: [PATCH 065/214] Adapt Git commit message template to style guide Adapted the content to reference to the new "Git Style Guide" (1). References: (1) https://github.com/arcticicestudio/styleguide-git GH-51 --- snowblocks/git/git-commit-msg | 42 +++++------------------------------ 1 file changed, 5 insertions(+), 37 deletions(-) diff --git a/snowblocks/git/git-commit-msg b/snowblocks/git/git-commit-msg index 3b7129b..6bab30f 100755 --- a/snowblocks/git/git-commit-msg +++ b/snowblocks/git/git-commit-msg @@ -1,39 +1,7 @@ -# [!][~][](): -# BLANK_LINE -# -# BLANK_LINE -# -# -# Subject line <= 50 characters -# Summary & Footer block <= 72-character wordwrap -# Separator Line <= 72-character wrapped -# -# ! -# Breaking change marker -# ~ -# Deprecation marker -# -# * bugfix -# * improvement -# * maintain -# * refactor -# * test -# -# * assets -# * cleanup -# * dependencies -# * documentation -# * performance -# * resources -# * security -# * style -# * toolset -# -# Example -# [JIRA-578][bugfix](security): Fix memory leak in "load()" method + +GH- + # ---------------------------------------------------------------------- -# Arctic Ice Studio "Glacier Git 0.24.0" Git Commit Message Template -# https://github.com/arcticicestudio/glacier-git -# This template is designed for the "gitflow" branching model. -# http://nvie.com/posts/a-successful-git-branching-model +# Ensure to adhere to the Arctic Ice Studio Git Style Guide: +# https://github.com/arcticicestudio/styleguide-git From d66ecb33da5b4bd689aa34e2485ae608960c6dc7 Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Tue, 31 Oct 2017 10:18:36 +0100 Subject: [PATCH 066/214] Remove local ruby and npm modules from PATH Global Ruby- and NPM packages are now installed to the default paths instead of customized paths to increase the overall compatibility and adapt to general conventions. GH-52 --- snowblocks/bash/config/env/igloo | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/snowblocks/bash/config/env/igloo b/snowblocks/bash/config/env/igloo index cc05347..a2f1f04 100644 --- a/snowblocks/bash/config/env/igloo +++ b/snowblocks/bash/config/env/igloo @@ -1,12 +1,12 @@ #!/usr/bin/env bash -# ++++++++++++++++++++++++++++++++++++++++++++++++++++++ -# title Igloo Environment + -# project igloo + -# repository https://github.com/arcticicestudio/igloo + -# author Arctic Ice Studio + -# email development@arcticicestudio.com + -# copyright Copyright (C) 2017 + -# ++++++++++++++++++++++++++++++++++++++++++++++++++++++ +# +++++++++++++++++++++++++++++++++++++++++++++++++++++ +# title Igloo Environment + +# project igloo + +# repository https://github.com/arcticicestudio/igloo + +# author Arctic Ice Studio + +# email development@arcticicestudio.com + +# copyright Copyright (C) 2017 + +# +++++++++++++++++++++++++++++++++++++++++++++++++++++ export LANG=en_US.UTF-8 export LC_MESSAGES=POSIX @@ -30,11 +30,9 @@ export PURPLEHOME=$STORE_RUN/pidgin if [ -e $(dirname $(realpath "${BASH_SOURCE[0]}"))/igloo.local ]; then . $(dirname $(realpath "${BASH_SOURCE[0]}"))/igloo.local else - unset -v GNUPGHOME + unset -v GNUPGHOME fi -PATH_RUBY_GEMS=($HOME/.gem/ruby/*/bin);PATH_RUBY_GEMS=$(printf "%s:" "${PATH_RUBY_GEMS[@]}") -PATH_NPM_PACKAGES=$STORE_RUN/npm/bin PATH_INTELLIJ_IDEA_U_HOME=/opt/intellij-idea-u/bin PATH_GIT_DIFF_HIGHLIGHT=/usr/share/git/diff-highlight -export PATH="${PATH}:$JAVA_HOME/bin:$PATH_NPM_PACKAGES:$PATH_RUBY_GEMS:$PATH_ANI2ICO:$PATH_INTELLIJ_IDEA_U_HOME:$PATH_GIT_DIFF_HIGHLIGHT" +export PATH="${PATH}:$JAVA_HOME/bin:$PATH_INTELLIJ_IDEA_U_HOME:$PATH_GIT_DIFF_HIGHLIGHT" From e1b5dbab86f8e826d48be84ba6278ecbcb1d8c3f Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Sat, 11 Nov 2017 09:30:08 +0100 Subject: [PATCH 067/214] Remove ignored pacman packages for "archbook" host The ignored packages have previously only been removed for the "igloo" host." GH-49 --- snowblocks/pacman/pacman.conf.archbook | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/snowblocks/pacman/pacman.conf.archbook b/snowblocks/pacman/pacman.conf.archbook index c154a7d..3dd5308 100644 --- a/snowblocks/pacman/pacman.conf.archbook +++ b/snowblocks/pacman/pacman.conf.archbook @@ -43,7 +43,7 @@ HoldPkg = pacman glibc # Instruct pacman to ignore any upgrades for the specified packages when performing a "--sysupgrade". # Shell-style glob patterns are allowed. -IgnorePkg = harfbuzz harfbuzz-icu gdk-pixbuf2 +IgnorePkg = # Instruct pacman to ignore any upgrades for all packages in the specified groups when performing a "--sysupgrade". # Shell-style glob patterns are allowed. From 8eee3520244ccfa4366a62c9043fa07fcf3bffc3 Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Wed, 15 Nov 2017 12:10:26 +0100 Subject: [PATCH 068/214] Migrate to the MIT license All license SVG badges and the "LICENSE.md" content have been updated. In addition all source code comment header have also been simplified. GH-59 --- .gitmodules | 4 +- LICENSE.md | 216 +++---------------------- README.md | 4 +- bootstrap | 16 +- snowblocks/bash/bin/colors | 15 +- snowblocks/bash/bin/keybase-stop | 21 ++- snowblocks/bash/bin/treed | 58 ++----- snowblocks/bash/bootstrap | 21 +-- snowblocks/bash/config/env/igloo | 15 +- snowblocks/bash/config/pkg/dircolors | 22 ++- snowblocks/bash/config/pkg/grep | 22 ++- snowblocks/bash/config/pkg/gulp | 19 +-- snowblocks/bash/config/pkg/history | 22 ++- snowblocks/bash/config/pkg/java | 36 ++--- snowblocks/bash/config/pkg/less | 22 ++- snowblocks/bash/config/pkg/pacaur | 19 +-- snowblocks/bash/config/pkg/sudo | 20 ++- snowblocks/bash/core/aliases | 32 ++-- snowblocks/bash/core/functions | 40 ++--- snowblocks/bash/core/loader/env | 15 +- snowblocks/bash/core/loader/pkg | 15 +- snowblocks/bash/core/prompt | 22 ++- snowblocks/bash/core/shelloptions | 20 +-- snowblocks/git/git-commit-msg | 1 - snowblocks/git/gitconfig | 19 +-- snowblocks/git/gitignore | 23 ++- snowblocks/pacman/makepkg.conf | 24 ++- snowblocks/pacman/pacman.conf.archbook | 32 ++-- snowblocks/pacman/pacman.conf.igloo | 32 ++-- snowblocks/vim/vimrc | 18 +-- 30 files changed, 286 insertions(+), 559 deletions(-) diff --git a/.gitmodules b/.gitmodules index f6ce6e9..02a54d3 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,3 @@ [submodule ".snowsaw"] - path = .snowsaw - url = https://github.com/arcticicestudio/snowsaw + path = .snowsaw + url = https://github.com/arcticicestudio/snowsaw diff --git a/LICENSE.md b/LICENSE.md index 59506ed..8a47ba1 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -1,194 +1,22 @@ -Apache License -============== - -*Version 2.0, January 2004* -*<>* - -### Terms and Conditions for use, reproduction, and distribution - -#### 1. Definitions - -"License" shall mean the terms and conditions for use, reproduction, and -distribution as defined by Sections 1 through 9 of this document. - -"Licensor" shall mean the copyright owner or entity authorized by the copyright -owner that is granting the License. - -"Legal Entity" shall mean the union of the acting entity and all other entities -that control, are controlled by, or are under common control with that entity. -For the purposes of this definition, "control" means **(i)** the power, direct or -indirect, to cause the direction or management of such entity, whether by -contract or otherwise, or **(ii)** ownership of fifty percent (50%) or more of the -outstanding shares, or **(iii)** beneficial ownership of such entity. - -"You" (or "Your") shall mean an individual or Legal Entity exercising -permissions granted by this License. - -"Source" form shall mean the preferred form for making modifications, including -but not limited to software source code, documentation source, and configuration -files. - -"Object" form shall mean any form resulting from mechanical transformation or -translation of a Source form, including but not limited to compiled object code, -generated documentation, and conversions to other media types. - -"Work" shall mean the work of authorship, whether in Source or Object form, made -available under the License, as indicated by a copyright notice that is included -in or attached to the work (an example is provided in the Appendix below). - -"Derivative Works" shall mean any work, whether in Source or Object form, that -is based on (or derived from) the Work and for which the editorial revisions, -annotations, elaborations, or other modifications represent, as a whole, an -original work of authorship. For the purposes of this License, Derivative Works -shall not include works that remain separable from, or merely link (or bind by -name) to the interfaces of, the Work and Derivative Works thereof. - -"Contribution" shall mean any work of authorship, including the original version -of the Work and any modifications or additions to that Work or Derivative Works -thereof, that is intentionally submitted to Licensor for inclusion in the Work -by the copyright owner or by an individual or Legal Entity authorized to submit -on behalf of the copyright owner. For the purposes of this definition, -"submitted" means any form of electronic, verbal, or written communication sent -to the Licensor or its representatives, including but not limited to -communication on electronic mailing lists, source code control systems, and -issue tracking systems that are managed by, or on behalf of, the Licensor for -the purpose of discussing and improving the Work, but excluding communication -that is conspicuously marked or otherwise designated in writing by the copyright -owner as "Not a Contribution." - -"Contributor" shall mean Licensor and any individual or Legal Entity on behalf -of whom a Contribution has been received by Licensor and subsequently -incorporated within the Work. - -#### 2. Grant of Copyright License - -Subject to the terms and conditions of this License, each Contributor hereby -grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, -irrevocable copyright license to reproduce, prepare Derivative Works of, -publicly display, publicly perform, sublicense, and distribute the Work and such -Derivative Works in Source or Object form. - -#### 3. Grant of Patent License - -Subject to the terms and conditions of this License, each Contributor hereby -grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, -irrevocable (except as stated in this section) patent license to make, have -made, use, offer to sell, sell, import, and otherwise transfer the Work, where -such license applies only to those patent claims licensable by such Contributor -that are necessarily infringed by their Contribution(s) alone or by combination -of their Contribution(s) with the Work to which such Contribution(s) was -submitted. If You institute patent litigation against any entity (including a -cross-claim or counterclaim in a lawsuit) alleging that the Work or a -Contribution incorporated within the Work constitutes direct or contributory -patent infringement, then any patent licenses granted to You under this License -for that Work shall terminate as of the date such litigation is filed. - -#### 4. Redistribution - -You may reproduce and distribute copies of the Work or Derivative Works thereof -in any medium, with or without modifications, and in Source or Object form, -provided that You meet the following conditions: - -* **(a)** You must give any other recipients of the Work or Derivative Works a copy of -this License; and -* **(b)** You must cause any modified files to carry prominent notices stating that You -changed the files; and -* **(c)** You must retain, in the Source form of any Derivative Works that You distribute, -all copyright, patent, trademark, and attribution notices from the Source form -of the Work, excluding those notices that do not pertain to any part of the -Derivative Works; and -* **(d)** If the Work includes a "NOTICE" text file as part of its distribution, then any -Derivative Works that You distribute must include a readable copy of the -attribution notices contained within such NOTICE file, excluding those notices -that do not pertain to any part of the Derivative Works, in at least one of the -following places: within a NOTICE text file distributed as part of the -Derivative Works; within the Source form or documentation, if provided along -with the Derivative Works; or, within a display generated by the Derivative -Works, if and wherever such third-party notices normally appear. The contents of -the NOTICE file are for informational purposes only and do not modify the -License. You may add Your own attribution notices within Derivative Works that -You distribute, alongside or as an addendum to the NOTICE text from the Work, -provided that such additional attribution notices cannot be construed as -modifying the License. - -You may add Your own copyright statement to Your modifications and may provide -additional or different license terms and conditions for use, reproduction, or -distribution of Your modifications, or for any such Derivative Works as a whole, -provided Your use, reproduction, and distribution of the Work otherwise complies -with the conditions stated in this License. - -#### 5. Submission of Contributions - -Unless You explicitly state otherwise, any Contribution intentionally submitted -for inclusion in the Work by You to the Licensor shall be under the terms and -conditions of this License, without any additional terms or conditions. -Notwithstanding the above, nothing herein shall supersede or modify the terms of -any separate license agreement you may have executed with Licensor regarding -such Contributions. - -#### 6. Trademarks - -This License does not grant permission to use the trade names, trademarks, -service marks, or product names of the Licensor, except as required for -reasonable and customary use in describing the origin of the Work and -reproducing the content of the NOTICE file. - -#### 7. Disclaimer of Warranty - -Unless required by applicable law or agreed to in writing, Licensor provides the -Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, -including, without limitation, any warranties or conditions of TITLE, -NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are -solely responsible for determining the appropriateness of using or -redistributing the Work and assume any risks associated with Your exercise of -permissions under this License. - -#### 8. Limitation of Liability - -In no event and under no legal theory, whether in tort (including negligence), -contract, or otherwise, unless required by applicable law (such as deliberate -and grossly negligent acts) or agreed to in writing, shall any Contributor be -liable to You for damages, including any direct, indirect, special, incidental, -or consequential damages of any character arising as a result of this License or -out of the use or inability to use the Work (including but not limited to -damages for loss of goodwill, work stoppage, computer failure or malfunction, or -any and all other commercial damages or losses), even if such Contributor has -been advised of the possibility of such damages. - -#### 9. Accepting Warranty or Additional Liability - -While redistributing the Work or Derivative Works thereof, You may choose to -offer, and charge a fee for, acceptance of support, warranty, indemnity, or -other liability obligations and/or rights consistent with this License. However, -in accepting such obligations, You may act only on Your own behalf and on Your -sole responsibility, not on behalf of any other Contributor, and only if You -agree to indemnify, defend, and hold each Contributor harmless for any liability -incurred by, or claims asserted against, such Contributor by reason of your -accepting any such warranty or additional liability. - -*END OF TERMS AND CONDITIONS* - -### APPENDIX: How to apply the Apache License to your work - -To apply the Apache License to your work, attach the following boilerplate -notice, with the fields enclosed by brackets `[]` replaced with your own -identifying information. (Don't include the brackets!) The text should be -enclosed in the appropriate comment syntax for the file format. We also -recommend that a file or class name and description of purpose be included on -the same "printed page" as the copyright notice for easier identification within -third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. +MIT License (MIT) + +Copyright (c) 2016-2017 Arctic Ice Studio +Copyright (c) 2016-2017 Sven Greb + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md index caf6837..d45027c 100644 --- a/README.md +++ b/README.md @@ -34,8 +34,8 @@ Please report issues/bugs, feature requests and suggestions for improvements to

-

Copyright © 2017 Arctic Ice Studio

+

Copyright © 2016-2017 Arctic Ice Studio

-

+

[snowsaw]: https://github.com/arcticicestudio/snowsaw diff --git a/bootstrap b/bootstrap index 8863a3d..e2db990 100755 --- a/bootstrap +++ b/bootstrap @@ -1,12 +1,12 @@ #!/usr/bin/env bash -# +++++++++++++++++++++++++++++++++++++++++++++++++++++ -# title Igloo Bootstrap + -# project igloo + -# repository https://github.com/arcticicestudio/igloo + -# author Arctic Ice Studio + -# email development@arcticicestudio.com + -# copyright Copyright (C) 2017 + -# +++++++++++++++++++++++++++++++++++++++++++++++++++++ + +# Copyright (c) 2016-2017 Arctic Ice Studio +# Copyright (c) 2016-2017 Sven Greb + +# Project: igloo +# Repository: https://github.com/arcticicestudio/igloo +# License: MIT + set -e SNOWSAW_DIR=".snowsaw" diff --git a/snowblocks/bash/bin/colors b/snowblocks/bash/bin/colors index cfe2258..e068417 100755 --- a/snowblocks/bash/bin/colors +++ b/snowblocks/bash/bin/colors @@ -1,12 +1,11 @@ #!/usr/bin/env bash -# ++++++++++++++++++++++++++++++++++++++++++++++++++++++ -# title Color Table + -# project igloo + -# repository https://github.com/arcticicestudio/igloo + -# author Arctic Ice Studio + -# email development@arcticicestudio.com + -# copyright Copyright (C) 2017 + -# ++++++++++++++++++++++++++++++++++++++++++++++++++++++ +# Copyright (c) 2016-2017 Arctic Ice Studio +# Copyright (c) 2016-2017 Sven Greb + +# Project: igloo +# Repository: https://github.com/arcticicestudio/igloo +# License: MIT + DOTS='•••' printf "\n 40m 41m 42m 43m 44m 45m 46m 47m\n"; for FGs in ' m' ' 1m' ' 30m' '1;30m' ' 31m' '1;31m' ' 32m' \ diff --git a/snowblocks/bash/bin/keybase-stop b/snowblocks/bash/bin/keybase-stop index de90e1c..c053a12 100755 --- a/snowblocks/bash/bin/keybase-stop +++ b/snowblocks/bash/bin/keybase-stop @@ -1,15 +1,14 @@ #!/usr/bin/env bash -# ++++++++++++++++++++++++++++++++++++++++++++++++++++++ -# title Keybase Stopper + -# project igloo + -# repository https://github.com/arcticicestudio/igloo + -# author Arctic Ice Studio + -# email development@arcticicestudio.com + -# copyright Copyright (C) 2017 + -# ++++++++++++++++++++++++++++++++++++++++++++++++++++++ -# -# Stops any running keybase services. -set -e -u -o pipefail +# Copyright (c) 2016-2017 Arctic Ice Studio +# Copyright (c) 2016-2017 Sven Greb + +# Project: igloo +# Repository: https://github.com/arcticicestudio/igloo +# License: MIT + +# Stops all running keybase services. + +set -euo pipefail if killall Keybase &> /dev/null; then printf "\e[32m=>\e[0m Keybase GUI\n" diff --git a/snowblocks/bash/bin/treed b/snowblocks/bash/bin/treed index 14e36fa..b0e6e2e 100755 --- a/snowblocks/bash/bin/treed +++ b/snowblocks/bash/bin/treed @@ -1,48 +1,18 @@ #!/usr/bin/env bash -# ++++++++++++++++++++++++++++++++++++++++++++++++++++++ -# title Colored Directory Tree + -# project igloo + -# repository https://github.com/arcticicestudio/igloo + -# author Arctic Ice Studio + -# email development@arcticicestudio.com + -# copyright Copyright (C) 2017 + -# ++++++++++++++++++++++++++++++++++++++++++++++++++++++ -# -# Prints an numbered advanced, recursive and colored directory treeview. -# -# @throws 1 Invalid option -# @throws 2 Missing argument -# @throws 3 invalid argument - -__cleanup() { - unset -v - unset -f help usage __cleanup -} +# Copyright (c) 2016-2017 Arctic Ice Studio +# Copyright (c) 2016-2017 Sven Greb -while getopts ":h" option ; do - case "$option" in - h) - help - exit 0 - ;; - \?) - printf "Invalid option: -%s" "$OPTARG" - exit 1 - ;; - :) - printf "-%s requires an argument." "$OPTARG" - exit 2 - ;; - esac -done +# Project: igloo +# Repository: https://github.com/arcticicestudio/igloo +# License: MIT -# +--- Null Parameter Handling ---+ -if [ -z "$1" -o "$1" = "-" ]; then - help - exit 2 -fi - -tree -aC -I ".git|node_modules|bower_components" --dirsfirst "$@" | less -FRNX +# Prints an advanced numbered, recursive and colored directory treeview. +# +# @param $@ the directory path(s) +treed() { + if command -v tree > /dev/null 2>&1; then + tree -aC -I ".git|node_modules|bower_components" --dirsfirst "$@" | less -FRNX + fi +} -__cleanup -exit 0 +treed $@ diff --git a/snowblocks/bash/bootstrap b/snowblocks/bash/bootstrap index 835e9eb..d185766 100755 --- a/snowblocks/bash/bootstrap +++ b/snowblocks/bash/bootstrap @@ -1,16 +1,11 @@ -#!/usr/bin/env bash -# ++++++++++++++++++++++++++++++++++++++++++++++++++++++ -# title Bash Snowblock Bootstrap + -# project igloo + -# repository https://github.com/arcticicestudio/igloo + -# author Arctic Ice Studio + -# email development@arcticicestudio.com + -# copyright Copyright (C) 2017 + -# ++++++++++++++++++++++++++++++++++++++++++++++++++++++ -# -# [References] -# StackOverflow -# (http://stackoverflow.com/questions/592620/check-if-a-program-exists-from-a-bash-script/677212#677212) +# Copyright (c) 2016-2017 Arctic Ice Studio +# Copyright (c) 2016-2017 Sven Greb + +# Project: igloo +# Repository: https://github.com/arcticicestudio/igloo +# License: MIT +# References: +# http://stackoverflow.com/questions/592620/check-if-a-program-exists-from-a-bash-script/677212#677212 __snowblock_bash::get_module_realpath() { if hash realpath 2>/dev/null; then diff --git a/snowblocks/bash/config/env/igloo b/snowblocks/bash/config/env/igloo index a2f1f04..87e5792 100644 --- a/snowblocks/bash/config/env/igloo +++ b/snowblocks/bash/config/env/igloo @@ -1,12 +1,11 @@ #!/usr/bin/env bash -# +++++++++++++++++++++++++++++++++++++++++++++++++++++ -# title Igloo Environment + -# project igloo + -# repository https://github.com/arcticicestudio/igloo + -# author Arctic Ice Studio + -# email development@arcticicestudio.com + -# copyright Copyright (C) 2017 + -# +++++++++++++++++++++++++++++++++++++++++++++++++++++ +# Copyright (c) 2016-2017 Arctic Ice Studio +# Copyright (c) 2016-2017 Sven Greb + +# Project: igloo +# Repository: https://github.com/arcticicestudio/igloo +# License: MIT + export LANG=en_US.UTF-8 export LC_MESSAGES=POSIX diff --git a/snowblocks/bash/config/pkg/dircolors b/snowblocks/bash/config/pkg/dircolors index b57a111..de77a7a 100644 --- a/snowblocks/bash/config/pkg/dircolors +++ b/snowblocks/bash/config/pkg/dircolors @@ -1,14 +1,12 @@ #!/usr/bin/env bash -# ++++++++++++++++++++++++++++++++++++++++++++++++++++++ -# title dircolors Configuration + -# project igloo + -# repository https://github.com/arcticicestudio/igloo + -# author Arctic Ice Studio + -# email development@arcticicestudio.com + -# copyright Copyright (C) 2017 + -# ++++++++++++++++++++++++++++++++++++++++++++++++++++++ -# -# [References] -# dircolors(1) -# dir_colors(5) +# Copyright (c) 2016-2017 Arctic Ice Studio +# Copyright (c) 2016-2017 Sven Greb + +# Project: igloo +# Repository: https://github.com/arcticicestudio/igloo +# License: MIT +# References: +# dircolors(1) +# dir_colors(5) + [[ -e ~/.dir_colors ]] && eval $(dircolors ~/.dir_colors) diff --git a/snowblocks/bash/config/pkg/grep b/snowblocks/bash/config/pkg/grep index 42cd4ad..6b9b588 100644 --- a/snowblocks/bash/config/pkg/grep +++ b/snowblocks/bash/config/pkg/grep @@ -1,17 +1,13 @@ #!/usr/bin/env bash -# ++++++++++++++++++++++++++++++++++++++++++++++++++++++ -# title grep Configuration + -# project igloo + -# repository https://github.com/arcticicestudio/igloo + -# author Arctic Ice Studio + -# email development@arcticicestudio.com + -# copyright Copyright (C) 2017 + -# ++++++++++++++++++++++++++++++++++++++++++++++++++++++ -# -# [References] -# GNU grep -# (http://www.gnu.org/software/grep/manual/grep.html) -# terminfo(5) +# Copyright (c) 2016-2017 Arctic Ice Studio +# Copyright (c) 2016-2017 Sven Greb + +# Project: igloo +# Repository: https://github.com/arcticicestudio/igloo +# License: MIT +# References: +# http://www.gnu.org/software/grep/manual/grep.html +# terminfo(5) # +--------+ # + Colors + diff --git a/snowblocks/bash/config/pkg/gulp b/snowblocks/bash/config/pkg/gulp index 35e44f5..cb78bed 100644 --- a/snowblocks/bash/config/pkg/gulp +++ b/snowblocks/bash/config/pkg/gulp @@ -1,18 +1,13 @@ #!/usr/bin/env bash -# +++++++++++++++++++++++++++++++++++++++++++++++++++++ -# title gulp Configuration + -# project igloo + -# repository https://github.com/arcticicestudio/igloo + -# author Arctic Ice Studio + -# email development@arcticicestudio.com + -# copyright Copyright (C) 2017 + -# +++++++++++++++++++++++++++++++++++++++++++++++++++++ -# -# [References] -# gulp +# Copyright (c) 2016-2017 Arctic Ice Studio +# Copyright (c) 2016-2017 Sven Greb + +# Project: igloo +# Repository: https://github.com/arcticicestudio/igloo +# License: MIT +# References: # http://gulpjs.com # https://github.com/gulpjs/gulp-cli#completion # https://github.com/gulpjs/gulp -# gulp() eval "$(gulp --completion=bash)" diff --git a/snowblocks/bash/config/pkg/history b/snowblocks/bash/config/pkg/history index 269579d..3386d40 100644 --- a/snowblocks/bash/config/pkg/history +++ b/snowblocks/bash/config/pkg/history @@ -1,17 +1,13 @@ #!/usr/bin/env bash -# ++++++++++++++++++++++++++++++++++++++++++++++++++++++ -# title history Configuration + -# project igloo + -# repository https://github.com/arcticicestudio/igloo + -# author Arctic Ice Studio + -# email development@arcticicestudio.com + -# copyright Copyright (C) 2017 + -# ++++++++++++++++++++++++++++++++++++++++++++++++++++++ -# -# [References] -# terminfo(5) -# ISO-8601 -# (http://www.iso.org/iso/home/standards/iso8601.htm) +# Copyright (c) 2016-2017 Arctic Ice Studio +# Copyright (c) 2016-2017 Sven Greb + +# Project: igloo +# Repository: https://github.com/arcticicestudio/igloo +# License: MIT +# References: +# terminfo(5) +# http://www.iso.org/iso/home/standards/iso8601.htm # +--------+ # + Output + diff --git a/snowblocks/bash/config/pkg/java b/snowblocks/bash/config/pkg/java index b797dce..86deaa1 100644 --- a/snowblocks/bash/config/pkg/java +++ b/snowblocks/bash/config/pkg/java @@ -1,25 +1,18 @@ #!/usr/bin/env bash -# ++++++++++++++++++++++++++++++++++++++++++++++++++++++ -# title Java Configuration + -# project igloo + -# repository https://github.com/arcticicestudio/igloo + -# author Arctic Ice Studio + -# email development@arcticicestudio.com + -# copyright Copyright (C) 2017 + -# ++++++++++++++++++++++++++++++++++++++++++++++++++++++ -# -# [References] -# Arch Linux -# (https://wiki.archlinux.org/index.php/Java_Runtime_Environment_fonts) -# Oracle JDK 8 -# (http://docs.oracle.com/javase/8/docs/technotes/guides/2d/flags.html#aaFonts) -# (http://docs.oracle.com/javase/8/docs/technotes/guides/2d/flags.html#xrender) -# StackOverflow -# (http://stackoverflow.com/questions/28327620/difference-between-java-options-java-tool-options-and-java-opts) -# NetBeans Wiki -# (http://wiki.netbeans.org/FaqFontRendering) -# java(1) -# javac(1) +# Copyright (c) 2016-2017 Arctic Ice Studio +# Copyright (c) 2016-2017 Sven Greb + +# Project: igloo +# Repository: https://github.com/arcticicestudio/igloo +# License: MIT +# References: +# https://wiki.archlinux.org/index.php/Java_Runtime_Environment_fonts +# http://docs.oracle.com/javase/8/docs/technotes/guides/2d/flags.html#aaFonts +# http://docs.oracle.com/javase/8/docs/technotes/guides/2d/flags.html#xrender +# http://stackoverflow.com/questions/28327620/difference-between-java-options-java-tool-options-and-java-opts +# http://wiki.netbeans.org/FaqFontRendering +# java(1) +# javac(1) # Sets the default system-wide JVM options. # @@ -47,5 +40,6 @@ # Alternative LCD monitor setting. Same as "lcd", but with different distribution of sub pixels (monitor is vertical). # - lcd_vbgr (VALUE_TEXT_ANTIALIAS_LCD_VBGR) # Alternative LCD monitor setting. Same as "lcd", but with different distribution of sub pixels (vertical again but on other side). + export _JAVA_OPTIONS="-Dawt.useSystemAAFontSettings=lcd -Dsun.java2d.xrender=true -Dswing.aatext=true" export _JAVA_AWT_WM_NONREPARENTING=1 diff --git a/snowblocks/bash/config/pkg/less b/snowblocks/bash/config/pkg/less index 4d73d75..020bca1 100644 --- a/snowblocks/bash/config/pkg/less +++ b/snowblocks/bash/config/pkg/less @@ -1,17 +1,13 @@ #!/usr/bin/env bash -# ++++++++++++++++++++++++++++++++++++++++++++++++++++++ -# title less Configuration + -# project igloo + -# repository https://github.com/arcticicestudio/igloo + -# author Arctic Ice Studio + -# email development@arcticicestudio.com + -# copyright Copyright (C) 2017 + -# ++++++++++++++++++++++++++++++++++++++++++++++++++++++ -# -# [References] -# GNU less -# (https://www.gnu.org/software/less) -# terminfo(5) +# Copyright (c) 2016-2017 Arctic Ice Studio +# Copyright (c) 2016-2017 Sven Greb + +# Project: igloo +# Repository: https://github.com/arcticicestudio/igloo +# License: MIT +# References: +# https://www.gnu.org/software/less +# terminfo(5) # Use lesspipe(1) for non-text input. [ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)" diff --git a/snowblocks/bash/config/pkg/pacaur b/snowblocks/bash/config/pkg/pacaur index 5b690c7..f591aa5 100644 --- a/snowblocks/bash/config/pkg/pacaur +++ b/snowblocks/bash/config/pkg/pacaur @@ -1,16 +1,11 @@ #!/usr/bin/env bash -# ++++++++++++++++++++++++++++++++++++++++++++++++++++++ -# title pacaur Configuration + -# project igloo + -# repository https://github.com/arcticicestudio/igloo + -# author Arctic Ice Studio + -# email development@arcticicestudio.com + -# copyright Copyright (C) 2017 + -# ++++++++++++++++++++++++++++++++++++++++++++++++++++++ -# -# [References] -# pacaur(8) -# GitHub Repository +# Copyright (c) 2016-2017 Arctic Ice Studio +# Copyright (c) 2016-2017 Sven Greb + +# Project: igloo +# Repository: https://github.com/arcticicestudio/igloo +# License: MIT +# References: # https://github.com/rmarquis/pacaur export AURDEST=/tmp/pacaur/cache diff --git a/snowblocks/bash/config/pkg/sudo b/snowblocks/bash/config/pkg/sudo index 3a38f1b..cb96daf 100644 --- a/snowblocks/bash/config/pkg/sudo +++ b/snowblocks/bash/config/pkg/sudo @@ -1,13 +1,11 @@ #!/usr/bin/env bash -# ++++++++++++++++++++++++++++++++++++++++++++++++++++++ -# title sudo Configuration + -# project igloo + -# repository https://github.com/arcticicestudio/igloo + -# author Arctic Ice Studio + -# email development@arcticicestudio.com + -# copyright Copyright (C) 2017 + -# ++++++++++++++++++++++++++++++++++++++++++++++++++++++ -# -# [References] -# sudo(8) +# Copyright (c) 2016-2017 Arctic Ice Studio +# Copyright (c) 2016-2017 Sven Greb + +# Project: igloo +# Repository: https://github.com/arcticicestudio/igloo +# License: MIT +# References: +# sudo(8) + export SUDO_PROMPT=$(printf "\e[01;30;47msudo\e[0m \e[36m%%u\e[0m@\e[34m%%h\e[m: ") diff --git a/snowblocks/bash/core/aliases b/snowblocks/bash/core/aliases index 9efddb0..ff063c3 100644 --- a/snowblocks/bash/core/aliases +++ b/snowblocks/bash/core/aliases @@ -1,18 +1,13 @@ #!/usr/bin/env bash -# ++++++++++++++++++++++++++++++++++++++++++++++++++++++ -# title Aliases + -# project igloo + -# repository https://github.com/arcticicestudio/igloo + -# author Arctic Ice Studio + -# email development@arcticicestudio.com + -# copyright Copyright (C) 2017 + -# ++++++++++++++++++++++++++++++++++++++++++++++++++++++ -# -# [References] -# GNU Bash -# (https://www.gnu.org/software/bash/manual/bash.html#Aliases) -# ISO-8601 - Date and time format -# (http://www.iso.org/iso/home/standards/iso8601.htm) +# Copyright (c) 2016-2017 Arctic Ice Studio +# Copyright (c) 2016-2017 Sven Greb + +# Project: igloo +# Repository: https://github.com/arcticicestudio/igloo +# License: MIT +# References: +# https://www.gnu.org/software/bash/manual/bash.html#Aliases +# http://www.iso.org/iso/home/standards/iso8601.htm # +--------------+ # + Applications + @@ -64,6 +59,15 @@ alias date='date "+%Y-%m-%d %H:%M:%S UTC%z"' # List in raw format with one entry per line. alias lsraw='LC_COLLATE=C \ls -N1 --group-directories-first' +# Shorthand for alias to +# +# * only display ANSI "color" escape sequences in "raw" form. (-R, --RAW-CONTROL-CHARS) +# * automatically exit if the entire file can be displayed on the first screen. (-F, --quit-if-one-screen) +# * disable sending the termcap (de)initialization strings to the terminal to avoid unnecessary operations like +# clearing the screen. (-X, --no-init) +# * use two tab stops. (-x2, --tabs=n) +alias less='less -RFXx2' + # +-------+ # + Utils + # +-------+ diff --git a/snowblocks/bash/core/functions b/snowblocks/bash/core/functions index d67571f..34c31f2 100644 --- a/snowblocks/bash/core/functions +++ b/snowblocks/bash/core/functions @@ -1,17 +1,15 @@ #!/usr/bin/env bash -# ++++++++++++++++++++++++++++++++++++++++++++++++++++++ -# title Functions + -# project igloo + -# repository https://github.com/arcticicestudio/igloo + -# author Arctic Ice Studio + -# email development@arcticicestudio.com + -# copyright Copyright (C) 2017 + -# ++++++++++++++++++++++++++++++++++++++++++++++++++++++ +# Copyright (c) 2016-2017 Arctic Ice Studio +# Copyright (c) 2016-2017 Sven Greb + +# Project: igloo +# Repository: https://github.com/arcticicestudio/igloo +# License: MIT # Switch up as many parent directories as the pass number. # Goes up one by default if no parameter is passed. # -# @usage .. +# @param $1 the amount of parent directories to switch up ..() { local d="" limit=$1 @@ -28,7 +26,7 @@ # Extract archived files. # -# @usage extract +# @param $1 the file to extract # @throws 1 Unsupported or invalid file extract() { if [ -f $1 ]; then @@ -57,7 +55,9 @@ extract() { # Extracts archived files to the specified destination. # Append a 'v' character at the end to be verbose. # -# @usage extractto [DESTINATION_FOLDER] [BE_VEROSE] +# @param $1 the file to extract +# @param $2 (optional) the extraction destination path +# @param $3 flag to indicate verbosity level # @options ["v"] # @throws 1 No arguments # @throws 2 File not found @@ -156,7 +156,8 @@ extractto() { # Compress files into archives. # -# @usage compress +# @param $1 the name of the archive +# @param $2 the paths(s)/file(s) to compress # @throws 1 Unsupported or invalid file compress() { if [ -n $1 ]; then @@ -186,7 +187,7 @@ compress() { # Shows the current session time. # Use option "-s" to show the session start. # -# @usage seti [OPTIONS] +# @param $@ (optional) the options # @options ["-s","-h"] # @throws 1 Unknown option seti() { @@ -228,16 +229,15 @@ seti() { } # Create a new directory and enter it. +# +# @param $1 the name of the directory to create and enter mkd() { mkdir -p "$@" && cd "$@" } -# "find" shorthand. -f() { - find . -name "$1" 2>&1 | grep -v 'Permission denied' -} - # Compare original and gzipped file size. +# +# @param $1 the file to compare gzcomp() { local origsize=$(wc -c < "$1"); local gzipsize=$(gzip -c "$1" | wc -c); @@ -247,6 +247,8 @@ gzcomp() { } # Encode a string of Unicode symbols to UTF-8 -escape() { +# +# @param $1 the string to escape +uesc() { printf "\\\x%s" $(printf "$@" | xxd -p -c1 -u); } diff --git a/snowblocks/bash/core/loader/env b/snowblocks/bash/core/loader/env index b86d8c2..192f20e 100644 --- a/snowblocks/bash/core/loader/env +++ b/snowblocks/bash/core/loader/env @@ -1,12 +1,11 @@ #!/usr/bin/env bash -# ++++++++++++++++++++++++++++++++++++++++++++++++++++++ -# title Environment Configuration Loader + -# project igloo + -# repository https://github.com/arcticicestudio/igloo + -# author Arctic Ice Studio + -# email development@arcticicestudio.com + -# copyright Copyright (C) 2017 + -# ++++++++++++++++++++++++++++++++++++++++++++++++++++++ +# Copyright (c) 2016-2017 Arctic Ice Studio +# Copyright (c) 2016-2017 Sven Greb + +# Project: igloo +# Repository: https://github.com/arcticicestudio/igloo +# License: MIT + __snowblock_bash::core::loader::env::get_module_realpath() { if hash realpath 2>/dev/null; then printf "$(realpath "${BASH_SOURCE[0]}")" diff --git a/snowblocks/bash/core/loader/pkg b/snowblocks/bash/core/loader/pkg index 1a8b9b7..2a909ec 100644 --- a/snowblocks/bash/core/loader/pkg +++ b/snowblocks/bash/core/loader/pkg @@ -1,12 +1,11 @@ #!/usr/bin/env bash -# ++++++++++++++++++++++++++++++++++++++++++++++++++++++ -# title Package Configuration Loader + -# project igloo + -# repository https://github.com/arcticicestudio/igloo + -# author Arctic Ice Studio + -# email development@arcticicestudio.com + -# copyright Copyright (C) 2017 + -# ++++++++++++++++++++++++++++++++++++++++++++++++++++++ +# Copyright (c) 2016-2017 Arctic Ice Studio +# Copyright (c) 2016-2017 Sven Greb + +# Project: igloo +# Repository: https://github.com/arcticicestudio/igloo +# License: MIT + __snowblock_bash::core::loader::pkg::get_module_realpath() { if hash realpath 2>/dev/null; then printf "$(realpath "${BASH_SOURCE[0]}")" diff --git a/snowblocks/bash/core/prompt b/snowblocks/bash/core/prompt index 63c4827..908e237 100644 --- a/snowblocks/bash/core/prompt +++ b/snowblocks/bash/core/prompt @@ -1,17 +1,13 @@ #!/usr/bin/env bash -# ++++++++++++++++++++++++++++++++++++++++++++++++++++++ -# title Shell Prompt + -# project igloo + -# repository https://github.com/arcticicestudio/igloo + -# author Arctic Ice Studio + -# email development@arcticicestudio.com + -# copyright Copyright (C) 2017 + -# ++++++++++++++++++++++++++++++++++++++++++++++++++++++ -# -# [References] -# StackOverflow -# (http://stackoverflow.com/questions/19092488/custom-bash-prompt-is-overwriting-itself/19501525#19501528) -# (http://mywiki.wooledge.org/BashFAQ/053) +# Copyright (c) 2016-2017 Arctic Ice Studio +# Copyright (c) 2016-2017 Sven Greb + +# Project: igloo +# Repository: https://github.com/arcticicestudio/igloo +# License: MIT +# References: +# http://stackoverflow.com/questions/19092488/custom-bash-prompt-is-overwriting-itself/19501525#19501528 +# http://mywiki.wooledge.org/BashFAQ/053 # +-----------------+ # + Git Integration + diff --git a/snowblocks/bash/core/shelloptions b/snowblocks/bash/core/shelloptions index cff713a..670e43c 100644 --- a/snowblocks/bash/core/shelloptions +++ b/snowblocks/bash/core/shelloptions @@ -1,16 +1,12 @@ #!/usr/bin/env bash -# ++++++++++++++++++++++++++++++++++++++++++++++++++++++ -# title Shell Built-In Options + -# project igloo + -# repository https://github.com/arcticicestudio/igloo + -# author Arctic Ice Studio + -# email development@arcticicestudio.com + -# copyright Copyright (C) 2017 + -# ++++++++++++++++++++++++++++++++++++++++++++++++++++++ -# -# [References] -# GNU Bash -# (http://www.gnu.org/software/bash/manual/html_node/The-Shopt-Builtin.html) +# Copyright (c) 2016-2017 Arctic Ice Studio +# Copyright (c) 2016-2017 Sven Greb + +# Project: igloo +# Repository: https://github.com/arcticicestudio/igloo +# License: MIT +# References: +# http://www.gnu.org/software/bash/manual/html_node/The-Shopt-Builtin.html # +--------+ # + Browse + diff --git a/snowblocks/git/git-commit-msg b/snowblocks/git/git-commit-msg index 6bab30f..eb3e245 100755 --- a/snowblocks/git/git-commit-msg +++ b/snowblocks/git/git-commit-msg @@ -1,7 +1,6 @@ GH- - # ---------------------------------------------------------------------- # Ensure to adhere to the Arctic Ice Studio Git Style Guide: # https://github.com/arcticicestudio/styleguide-git diff --git a/snowblocks/git/gitconfig b/snowblocks/git/gitconfig index 4a717e7..ea5b86d 100755 --- a/snowblocks/git/gitconfig +++ b/snowblocks/git/gitconfig @@ -1,18 +1,13 @@ -# +++++++++++++++++++++++++++++++++++++++++++++++++++++ -# title Git Configuration + -# project igloo + -# repository https://github.com/arcticicestudio/igloo + -# author Arctic Ice Studio + -# email development@arcticicestudio.com + -# copyright Copyright (C) 2017 + -# +++++++++++++++++++++++++++++++++++++++++++++++++++++ -# -# [References] -# Git +# Copyright (c) 2016-2017 Arctic Ice Studio +# Copyright (c) 2016-2017 Sven Greb + +# Project: igloo +# Repository: https://github.com/arcticicestudio/igloo +# License: MIT +# References: # https://git-scm.com/docs/git-config # https://git-scm.com/book/tr/v2/Customizing-Git-Git-Configuration#_colors_in_git # https://git-scm.com/docs/git-config#_conditional_includes -# diff-so-fancy # https://github.com/so-fancy/diff-so-fancy#options [includeIf "gitdir:~/yggdrasil/"] diff --git a/snowblocks/git/gitignore b/snowblocks/git/gitignore index 63f404e..07ce745 100755 --- a/snowblocks/git/gitignore +++ b/snowblocks/git/gitignore @@ -1,17 +1,12 @@ -# ++++++++++++++++++++++++++++++++++++++++++++++++++++++ -# title Git Ignore Pattern + -# project igloo + -# repository https://github.com/arcticicestudio/igloo + -# author Arctic Ice Studio + -# email development@arcticicestudio.com + -# copyright Copyright (C) 2017 + -# ++++++++++++++++++++++++++++++++++++++++++++++++++++++ -# -# [References] -# Git -# (https://git-scm.com/docs/gitignore) -# Java -# (http://www.java.com/en/download/help/error_hotspot.xml) +# Copyright (c) 2016-2017 Arctic Ice Studio +# Copyright (c) 2016-2017 Sven Greb + +# Project: igloo +# Repository: https://github.com/arcticicestudio/igloo +# License: MIT +# References: +# https://git-scm.com/docs/gitignore +# http://www.java.com/en/download/help/error_hotspot.xml # +--------------------+ # + Runtime Extensions + diff --git a/snowblocks/pacman/makepkg.conf b/snowblocks/pacman/makepkg.conf index 707b49e..70d13f2 100644 --- a/snowblocks/pacman/makepkg.conf +++ b/snowblocks/pacman/makepkg.conf @@ -1,17 +1,13 @@ -# ++++++++++++++++++++++++++++++++++++++++++++++++++++++ -# title Pacman makepkg Configuration + -# project igloo + -# repository https://github.com/arcticicestudio/igloo + -# author Arctic Ice Studio + -# email development@arcticicestudio.com + -# copyright Copyright (C) 2017 + -# ++++++++++++++++++++++++++++++++++++++++++++++++++++++ -# -# [References] -# pacman(8) -# makepkg(8) -# makepkg.conf(5) -# Arch Linux +# Copyright (c) 2016-2017 Arctic Ice Studio +# Copyright (c) 2016-2017 Sven Greb + +# Project: igloo +# Repository: https://github.com/arcticicestudio/igloo +# License: MIT +# References: +# pacman(8) +# makepkg(8) +# makepkg.conf(5) # https://wiki.archlinux.org/index.php/makepkg # https://wiki.archlinux.org/index.php/pacman diff --git a/snowblocks/pacman/pacman.conf.archbook b/snowblocks/pacman/pacman.conf.archbook index 3dd5308..2c5a078 100644 --- a/snowblocks/pacman/pacman.conf.archbook +++ b/snowblocks/pacman/pacman.conf.archbook @@ -1,26 +1,22 @@ -# ++++++++++++++++++++++++++++++++++++++++++++++++++++++ -# title Pacman archbook Configuration + -# project igloo + -# repository https://github.com/arcticicestudio/igloo + -# author Arctic Ice Studio + -# email development@arcticicestudio.com + -# copyright Copyright (C) 2017 + -# ++++++++++++++++++++++++++++++++++++++++++++++++++++++ -# -# [GPG] -# Initialize the local keyring before first using pacman by running "pacman-key --init". -# Populate with the keys of all official Arch Linux packagers by running "pacman-key --populate archlinux". -# -# [References] -# pacman(8) -# pacman.conf(5) -# repo-add(8) -# Arch Linux +# Copyright (c) 2016-2017 Arctic Ice Studio +# Copyright (c) 2016-2017 Sven Greb + +# Project: igloo +# Repository: https://github.com/arcticicestudio/igloo +# License: MIT +# References: +# pacman(8) +# pacman.conf(5) +# repo-add(8) # https://wiki.archlinux.org/index.php/pacman # https://www.archlinux.org/pacman/pacman.8.html # https://www.archlinux.org/pacman/pacman.conf.5.html # https://www.archlinux.org/pacman/repo-add.8.html +# [GPG] +# Initialize the local keyring before first using pacman by running "pacman-key --init". +# Populate with the keys of all official Arch Linux packagers by running "pacman-key --populate archlinux". + # +---------+ # + Options + # +---------+ diff --git a/snowblocks/pacman/pacman.conf.igloo b/snowblocks/pacman/pacman.conf.igloo index 7346556..77bb571 100644 --- a/snowblocks/pacman/pacman.conf.igloo +++ b/snowblocks/pacman/pacman.conf.igloo @@ -1,26 +1,22 @@ -# ++++++++++++++++++++++++++++++++++++++++++++++++++++++ -# title Pacman igloo Configuration + -# project igloo + -# repository https://github.com/arcticicestudio/igloo + -# author Arctic Ice Studio + -# email development@arcticicestudio.com + -# copyright Copyright (C) 2017 + -# ++++++++++++++++++++++++++++++++++++++++++++++++++++++ -# -# [GPG] -# Initialize the local keyring before first using pacman by running "pacman-key --init". -# Populate with the keys of all official Arch Linux packagers by running "pacman-key --populate archlinux". -# -# [References] -# pacman(8) -# pacman.conf(5) -# repo-add(8) -# Arch Linux +# Copyright (c) 2016-2017 Arctic Ice Studio +# Copyright (c) 2016-2017 Sven Greb + +# Project: igloo +# Repository: https://github.com/arcticicestudio/igloo +# License: MIT +# References: +# pacman(8) +# pacman.conf(5) +# repo-add(8) # https://wiki.archlinux.org/index.php/pacman # https://www.archlinux.org/pacman/pacman.8.html # https://www.archlinux.org/pacman/pacman.conf.5.html # https://www.archlinux.org/pacman/repo-add.8.html +# [GPG] +# Initialize the local keyring before first using pacman by running "pacman-key --init". +# Populate with the keys of all official Arch Linux packagers by running "pacman-key --populate archlinux". + # +---------+ # + Options + # +---------+ diff --git a/snowblocks/vim/vimrc b/snowblocks/vim/vimrc index 1c827c1..f3132fc 100644 --- a/snowblocks/vim/vimrc +++ b/snowblocks/vim/vimrc @@ -1,14 +1,10 @@ -" +++++++++++++++++++++++++++++++++++++++++++++++++++++ -" title Vim Configuration + -" project igloo + -" repository https://github.com/arcticicestudio/igloo + -" author Arctic Ice Studio + -" email development@arcticicestudio.com + -" copyright Copyright (C) 2017 + -" +++++++++++++++++++++++++++++++++++++++++++++++++++++ -" -" [References] -" Google Style Guide +" Copyright (c) 2016-2017 Arctic Ice Studio +" Copyright (c) 2016-2017 Sven Greb + +" Project: igloo +" Repository: https://github.com/arcticicestudio/igloo +" License: MIT +" References: " https://google.github.io/styleguide/vimscriptguide.xml "+---------+ From b999307e695a201f96fad9f7283341e06ff9f11d Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Wed, 15 Nov 2017 13:29:33 +0100 Subject: [PATCH 069/214] Implement diff-so-fancy script for use without Git "diff-so-fancy" (1) has been designed to work within Git controlled directories. To allow to use it to compare files that are not controlled by Git the "--no-index" (2) option of "git-diff" has been used. The script pipes the output to "less" using the options * "-R, --RAW-CONTROL-CHARS" to only display ANSI "color" escape sequences in "raw" form * "-F, --quit-if-one-screen" to automatically exit if the entire file can be displayed on the first screen. * "-X, --no-init" to disable sending the termcap (de)initialization strings to the terminal to avoid unnecessary operations like clearing the screen. * "-x2, --tabs=2" to use two tab stops. References: * https://github.com/so-fancy/diff-so-fancy/issues/220#issuecomment-282530252 (1) https://github.com/so-fancy/diff-so-fancy (2) https://git-scm.com/docs/git-diff#git-diff-emgitdiffem--no-index--options--ltpathgt823082 GH-61 --- snowblocks/bash/bin/dsf | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100755 snowblocks/bash/bin/dsf diff --git a/snowblocks/bash/bin/dsf b/snowblocks/bash/bin/dsf new file mode 100755 index 0000000..dedf125 --- /dev/null +++ b/snowblocks/bash/bin/dsf @@ -0,0 +1,24 @@ +#!/usr/bin/env bash +# Copyright (c) 2016-2017 Arctic Ice Studio +# Copyright (c) 2016-2017 Sven Greb + +# Project: igloo +# Repository: https://github.com/arcticicestudio/igloo +# License: MIT + +set -euo pipefail + +# Allows to use "diff-so-fancy" to compare files that are not controlled by Git. +# Under the hood it makes use of "git diff" by using the "no-index" option which allows to compare the given two +# paths/files on the filesystem outside a working tree controlled by Git. +# +# @param $1 the path/files to compare +# @param $2 the path/files to be compared +# @see https://github.com/so-fancy/diff-so-fancy/issues/220#issuecomment-282530252 +dsf() { + if [ "$#" -eq 2 ]; then + git diff --no-index --color "$@" | diff-so-fancy | less -RFXx2 + fi +} + +dsf $@ From 9be967a9405749ea932bb8197fc9d8c3519cb162 Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Wed, 15 Nov 2017 13:58:29 +0100 Subject: [PATCH 070/214] Use "diff-so-fancy" for "git-add" interactive mode Git 2.14.0 (1) includes a restructuring of "diff-highlight" (contrib/) for a easier reuse by "diff-so-fancy" (2). This commit sets "diff-so-fancy" as default filter for the "git add" interactive/patch mode can via the new "interactive.diffFilter" configuration. References: https://github.com/so-fancy/diff-so-fancy/issues/35#issuecomment-196940127 (1) https://github.com/git/git/blob/master/Documentation/RelNotes/2.14.0.txt#L213#L214 (2) https://github.com/so-fancy/diff-so-fancy GH-63 --- snowblocks/git/gitconfig | 3 +++ 1 file changed, 3 insertions(+) diff --git a/snowblocks/git/gitconfig b/snowblocks/git/gitconfig index ea5b86d..9433791 100755 --- a/snowblocks/git/gitconfig +++ b/snowblocks/git/gitconfig @@ -63,6 +63,9 @@ stripLeadingSymbols = true useUnicodeRuler = true +[interactive] + diffFilter = diff-so-fancy + [merge] tool = intellij ff = false From da0587429ab412a756f2454577e631ddeb97c72b Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Wed, 15 Nov 2017 15:12:29 +0100 Subject: [PATCH 071/214] Implement transparent git encryption using GPG MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Added a global "."itattributes" "ile and configured the global ".gitconfig" file to apply a transparent git encryption with "smudge" and "clean" (diff) filters using GPG (1) to process files just before they’re checked out and just before they’re staged. References: * https://git-scm.com/book/en/v2/images/smudge.png * https://git-scm.com/book/en/v2/images/clean.png * https://gist.github.com/shadowhand/873637 (1) https://wiki.archlinux.org/index.php/GnuPG GH-64 --- snowblocks/git/git-diff-igloocrypt | 12 ++++++++++++ snowblocks/git/gitattributes | 14 ++++++++++++++ snowblocks/git/gitconfig | 7 +++++++ snowblocks/git/snowblock.json | 2 ++ 4 files changed, 35 insertions(+) create mode 100755 snowblocks/git/git-diff-igloocrypt create mode 100644 snowblocks/git/gitattributes diff --git a/snowblocks/git/git-diff-igloocrypt b/snowblocks/git/git-diff-igloocrypt new file mode 100755 index 0000000..a3080d4 --- /dev/null +++ b/snowblocks/git/git-diff-igloocrypt @@ -0,0 +1,12 @@ +#!/usr/bin/env bash +# Copyright (c) 2016-2017 Arctic Ice Studio +# Copyright (c) 2016-2017 Sven Greb + +# Project: igloo +# Repository: https://github.com/arcticicestudio/igloo +# License: MIT + +# GPG decryption command for the "igloocrypt" diff filter +# The output is redirected to suppress error messages caused by the Git filter flow. + +gpg --decrypt --batch --no-tty "$1" > /dev/null 2>&1 || cat $1 diff --git a/snowblocks/git/gitattributes b/snowblocks/git/gitattributes new file mode 100644 index 0000000..400e25b --- /dev/null +++ b/snowblocks/git/gitattributes @@ -0,0 +1,14 @@ +# Copyright (c) 2016-2017 Arctic Ice Studio +# Copyright (c) 2016-2017 Sven Greb + +# Project: igloo +# Repository: https://github.com/arcticicestudio/igloo +# License: MIT +# References: +# https://git-scm.com/docs/gitattributes +# https://git-scm.com/book/en/v2/Customizing-Git-Git-Attributes#Keyword-Expansion +# https://www.gnupg.org +# https://wiki.archlinux.org/index.php/GnuPG + +*.igloocrypt filter=igloocrypt diff=igloocrypt +.gitattributes !filter !diff diff --git a/snowblocks/git/gitconfig b/snowblocks/git/gitconfig index ea5b86d..5407f29 100755 --- a/snowblocks/git/gitconfig +++ b/snowblocks/git/gitconfig @@ -53,6 +53,9 @@ tool = intellij compactionHeuristic = true +[diff "igloocrypt"] + textconv = ".git-diff-igloocrypt" + [difftool "intellij"] prompt = true cmd = idea diff $(cd $(dirname "$LOCAL") && pwd)/$(basename "$LOCAL") $(cd $(dirname "$REMOTE") && pwd)/$(basename "$REMOTE") @@ -63,6 +66,10 @@ stripLeadingSymbols = true useUnicodeRuler = true +[filter "igloocrypt"] + clean = "gpg --encrypt --recipient 60C54F1519346085" + smudge = "gpg --decrypt" + [merge] tool = intellij ff = false diff --git a/snowblocks/git/snowblock.json b/snowblocks/git/snowblock.json index dad4e36..22bf2fa 100644 --- a/snowblocks/git/snowblock.json +++ b/snowblocks/git/snowblock.json @@ -4,7 +4,9 @@ }, { "link": { + "~/.gitattributes": null, "~/.git-commit-msg": null, + "~/.git-diff-igloocrypt": null, "~/.gitconfig": null, "~/.gitconfig_auth": null, "~/.gitconfig_auth_job": null, From ba50f38657e56790b07e90119849d031a676fc15 Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Wed, 15 Nov 2017 15:32:35 +0100 Subject: [PATCH 072/214] Create the new "cower" snowblock Added the user-level configuration file "~/.config/cower/config". References: * cower(1) * https://github.com/falconindy/cower GH-65 --- snowblocks/cower/config | 12 ++++++++++++ snowblocks/cower/snowblock.json | 13 +++++++++++++ 2 files changed, 25 insertions(+) create mode 100755 snowblocks/cower/config create mode 100644 snowblocks/cower/snowblock.json diff --git a/snowblocks/cower/config b/snowblocks/cower/config new file mode 100755 index 0000000..7e72873 --- /dev/null +++ b/snowblocks/cower/config @@ -0,0 +1,12 @@ +# Copyright (c) 2016-2017 Arctic Ice Studio +# Copyright (c) 2016-2017 Sven Greb + +# Project: igloo +# Repository: https://github.com/arcticicestudio/igloo +# License: MIT +# References: +# cower(1) +# https://github.com/falconindy/cower + +# Enable tty color support. +Color = always diff --git a/snowblocks/cower/snowblock.json b/snowblocks/cower/snowblock.json new file mode 100644 index 0000000..ed6cff4 --- /dev/null +++ b/snowblocks/cower/snowblock.json @@ -0,0 +1,13 @@ +[ + { + "clean": ["~/.config/cower"] + }, + { + "link": { + "~/.config/cower/config": { + "create": true, + "path": "config" + } + } + } +] From 349dc3cb438f24d0ea7b56f82f4e20b525873493 Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Wed, 15 Nov 2017 11:02:58 +0100 Subject: [PATCH 073/214] Add new systemd user unit services This commit for the new "systemd" (1) snowblock includes user service (2) units (3) to 1. automount the "sync" gocryptfs (4) volume located in the Dropbox (5) folder receiving the password stored in the GNOME Keyring (6) via the "secret-tool" ("libsecret" (7)). 2. automatically run a instance of the "ssh-agent" (8) using the "$SSH_AUTH_SOCK" and let systemd manage the "$SSH_AGENT_PID env. The new snowblock includes a documentation to describe the requirements for the "igloosync-dropbox.service" file. It contains information * about how to create the required "gocryptfs" password stored- and received via "secret-tool" * about how to configure FUSE (9) (libfuse (10)) with the "/etc/fuse.conf" file to allow non-root users to specify the "allow_other" or "allow_root" mount options which overrides the security measure restricting file access to the filesystem owner, so that all users (including root) can access the files. >>> snowsaw core plugin configuration >>>> clean The target path "~/.config/systemd/user" is cleaned before the "link" core plugin execution. >>>> link The target paths "~/.config/systemd/user" for all unit files will be created by snowsaw if they doesn't exist yet. The "igloosync-dropbox.service" unit file will be linked for the "archbook" and "igloo" hosts while the "ssh-agent.service" file is linked by default. References: (1) https://wiki.archlinux.org/index.php/Systemd (2) https://www.freedesktop.org/software/systemd/man/systemd.service.html (3) https://www.freedesktop.org/software/systemd/man/systemd.unit.html (4) https://github.com/rfjakob/gocryptfs (5) https://www.dropbox.com (6) https://wiki.archlinux.org/index.php/GNOME/Keyring (7) https://wiki.gnome.org/Projects/Libsecret (8) https://wiki.archlinux.org/index.php/SSH_keys#ssh-agent (9) https://en.wikipedia.org/wiki/Filesystem_in_Userspace (10) https://github.com/libfuse/libfuse GH-58 --- snowblocks/systemd/README.md | 55 +++++++++++++++++++ snowblocks/systemd/snowblock.json | 20 +++++++ .../units/user/igloosync-dropbox.service | 12 ++++ .../systemd/units/user/ssh-agent.service | 10 ++++ 4 files changed, 97 insertions(+) create mode 100644 snowblocks/systemd/README.md create mode 100644 snowblocks/systemd/snowblock.json create mode 100644 snowblocks/systemd/units/user/igloosync-dropbox.service create mode 100644 snowblocks/systemd/units/user/ssh-agent.service diff --git a/snowblocks/systemd/README.md b/snowblocks/systemd/README.md new file mode 100644 index 0000000..0cba548 --- /dev/null +++ b/snowblocks/systemd/README.md @@ -0,0 +1,55 @@ +* [Units](#units) + * [Services](#services) + * [igloosync-dropbox](#igloosync-dropbox) + * [`gocryptfs` and `secret-tool` setup](#gocryptfs-and-secret-tool-setup) + * [`libfuse` configuration](#libfuse-configuration) + +# Units + +## Services + +### igloosync-dropbox + +#### `gocryptfs` and `secret-tool` setup + +> The [gocryptfs][gocryptfs-gh] password **must be stored in the** [GNOME Keyring][archwiki-keyring] **before enabling this user service** in order to receive the value from the [`secret-tool`][gnome-libsecret]! + +The stored password must be assigned with the following attribute-value pair: + +* attribute: `igloosync` +* value: `dropbox` + +To store the password run + +```sh +secret-tool store --label="igloosync-dropbox" igloosync dropbox +``` + +The password can be received from the `secret-tool` by running + +```sh +secret-tool lookup igloosync dropbox +``` + +#### `libfuse` configuration + +[FUSE][fuse] ([libfuse][libfuse]) must be configured with the `/etc/fuse.conf` file to allow non-root users to specify the `allow_other` or `allow_root` mount options which overrides the security measure restricting file access to the filesystem owner, so that all users (including root) can access the files. + +This is necessary to access the files of the mounted `gocryptfs` volume with applications that are run via `sudo`. It is used in the [pacman][snowblock-pacman] snowblock for the local package repository `bitfroest` which would throw a *Permission Denied* exception when running `pacman` (e.g. `sudo pacman -Sy`) if the volume is not mounted with the `gocryptfs -allow_other` option. + +Please note that `libfuse` has a **[unresolved security bug][libfuse-secbug]** when using the `allow_other` mount option as [described in the official documentation][libfuse-sec], but is of **little concern if the filesystem is accessible only to the mounting user** which is the case since these are **dotfiles for a personal system**: + +> No other user (including root) can access the contents of the mounted filesystem (though this can be relaxed by allowing the use of the `allow_other` and `allow_root` mount options in `/etc/fuse.conf`) +> +> If you intend to use the allow_other mount options, be aware that FUSE has an unresolved [security bug][libfuse-secbug]: if the `default_permissions` mount option is not used, the results of the first permission check performed by the file system for a directory entry will be re-used for subsequent accesses as long as the inode of the accessed entry is present in the kernel cache - even if the permissions have since changed, and even if the subsequent access is made by a different user. This is of little concern if the filesystem is accessible only to the mounting user (which has full access to the filesystem anyway), but becomes a security issue when other users are allowed to access the filesystem (since they can exploit this to perform operations on the filesystem that they do not actually have permissions for). +> +> This bug needs to be fixed in the Linux kernel and has been known since 2006 but unfortunately no fix has been applied yet. If you depend on correct permission handling for FUSE file systems, the only workaround is to use `default_permissions` (which does not currently support ACLs), or to completely disable caching of directory entry attributes. + +[archwiki-keyring]: https://wiki.archlinux.org/index.php/GNOME/Keyring +[fuse]: https://en.wikipedia.org/wiki/Filesystem_in_Userspace +[gnome-libsecret]: https://wiki.gnome.org/Projects/Libsecret +[gocryptfs-gh]: https://github.com/rfjakob/gocryptfs +[libfuse]: https://github.com/libfuse/libfuse +[libfuse-sec]: https://github.com/libfuse/libfuse#security-implications +[libfuse-secbug]: https://github.com/libfuse/libfuse/issues/15 +[snowblock-pacman]: https://github.com/arcticicestudio/igloo/tree/develop/snowblocks/pacman diff --git a/snowblocks/systemd/snowblock.json b/snowblocks/systemd/snowblock.json new file mode 100644 index 0000000..3aef248 --- /dev/null +++ b/snowblocks/systemd/snowblock.json @@ -0,0 +1,20 @@ +[ + { + "clean": ["~/.config/systemd/user"] + }, + { + "link": { + "~/.config/systemd/user/igloosync-dropbox.service": { + "create": true, + "hosts": { + "archbook": "units/user/igloosync-dropbox.service", + "igloo": "units/user/igloosync-dropbox.service" + } + }, + "~/.config/systemd/user/ssh-agent.service": { + "create": true, + "path": "units/user/ssh-agent.service" + } + } + } +] diff --git a/snowblocks/systemd/units/user/igloosync-dropbox.service b/snowblocks/systemd/units/user/igloosync-dropbox.service new file mode 100644 index 0000000..1b3a7ba --- /dev/null +++ b/snowblocks/systemd/units/user/igloosync-dropbox.service @@ -0,0 +1,12 @@ +[Unit] +Description=Dropbox Synchronization (igloosync-dropbox) +After=network.target local-fs.target + +[Service] +Type=forking +ExecStart=/usr/bin/gocryptfs -allow_other -extpass="secret-tool lookup igloosync dropbox" %h/cloud/.dropbox/Dropbox/sync %h/cloud/dropbox +Restart=on-failure +RestartSec=5 + +[Install] +WantedBy=default.target diff --git a/snowblocks/systemd/units/user/ssh-agent.service b/snowblocks/systemd/units/user/ssh-agent.service new file mode 100644 index 0000000..161b15a --- /dev/null +++ b/snowblocks/systemd/units/user/ssh-agent.service @@ -0,0 +1,10 @@ +[Unit] +Description=SSH Key Agent + +[Service] +Type=forking +Environment=SSH_AUTH_SOCK=%t/ssh-agent.socket +ExecStart=/usr/bin/ssh-agent -a $SSH_AUTH_SOCK + +[Install] +WantedBy=default.target From 4d8031d7f86b04f4d6e00dee017deb9c027fa079 Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Thu, 16 Nov 2017 19:46:18 +0100 Subject: [PATCH 074/214] Create new "htop" snowblock References: * htop(1) GH-68 --- snowblocks/htop/htoprc | 33 +++++++++++++++++++++++++++++++++ snowblocks/htop/snowblock.json | 13 +++++++++++++ 2 files changed, 46 insertions(+) create mode 100644 snowblocks/htop/htoprc create mode 100644 snowblocks/htop/snowblock.json diff --git a/snowblocks/htop/htoprc b/snowblocks/htop/htoprc new file mode 100644 index 0000000..07ac778 --- /dev/null +++ b/snowblocks/htop/htoprc @@ -0,0 +1,33 @@ +# Copyright (c) 2016-2017 Arctic Ice Studio +# Copyright (c) 2016-2017 Sven Greb + +# Project: igloo +# Repository: https://github.com/arcticicestudio/igloo +# License: MIT +# References: +# htop(1) + +fields=0 48 17 38 2 46 47 49 1 +sort_key=46 +sort_direction=1 +hide_threads=0 +hide_kernel_threads=1 +hide_userland_threads=0 +shadow_other_users=0 +show_thread_names=1 +show_program_path=1 +highlight_base_name=0 +highlight_megabytes=1 +highlight_threads=1 +tree_view=1 +header_margin=1 +detailed_cpu_time=0 +cpu_count_from_zero=0 +update_process_names=0 +account_guest_in_cpu_meter=0 +color_scheme=0 +delay=15 +left_meters=AllCPUs Memory Swap +left_meter_modes=1 1 1 +right_meters=Hostname Tasks LoadAverage Uptime Battery +right_meter_modes=2 2 2 2 2 diff --git a/snowblocks/htop/snowblock.json b/snowblocks/htop/snowblock.json new file mode 100644 index 0000000..5fe9a0a --- /dev/null +++ b/snowblocks/htop/snowblock.json @@ -0,0 +1,13 @@ +[ + { + "clean": ["~/.config/htop"] + }, + { + "link": { + "~/.config/htop/htoprc": { + "create": true, + "path": "htoprc" + } + } + } +] From 371d1a02348e1512bd6ff3497cc929f41d07f018 Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Thu, 16 Nov 2017 20:24:02 +0100 Subject: [PATCH 075/214] Fix path for GPG "igloocrypt" encryption script The path for the "igloocrypt" diff "textconv" property changed to be a absolute path ("~/"). GH-64 --- snowblocks/git/gitconfig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/snowblocks/git/gitconfig b/snowblocks/git/gitconfig index 5407f29..040cf1b 100755 --- a/snowblocks/git/gitconfig +++ b/snowblocks/git/gitconfig @@ -54,7 +54,7 @@ compactionHeuristic = true [diff "igloocrypt"] - textconv = ".git-diff-igloocrypt" + textconv = "~/.git-diff-igloocrypt" [difftool "intellij"] prompt = true From 0759d9ab289cbe5a258ce312e23fc4b0026ddbf9 Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Thu, 16 Nov 2017 21:17:00 +0100 Subject: [PATCH 076/214] Add and configure the "NERD Commenter" plugin The NERD Commenter (1) plugin allows dynamic commenting via hotkeys with language syntax awareness. The "NERDSpaceDelims" config is enabled to automatically add spaces after comment delimiters. References: (1) https://github.com/scrooloose/nerdcommenter GH-71 --- snowblocks/vim/vimrc | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/snowblocks/vim/vimrc b/snowblocks/vim/vimrc index f3132fc..8e3013f 100644 --- a/snowblocks/vim/vimrc +++ b/snowblocks/vim/vimrc @@ -14,6 +14,7 @@ call plug#begin(expand('~/.vim/plugged')) "+--- IDE / Workflow ---+ Plug 'mattn/emmet-vim' Plug 'davidhalter/jedi-vim' +Plug 'scrooloose/nerdcommenter' Plug 'Townk/vim-autoclose' Plug 'tpope/vim-fugitive' Plug 'shime/vim-livedown' @@ -103,6 +104,10 @@ function! LightlineFilename() \ ('' != LightlineModified() ? ' ' . LightlineModified() : '') endfunction +"+--- scrooloose/nerdcommenter ---+ +" Add spaces after comment delimiters +let g:NERDSpaceDelims = 1 + "+--- airblade/vim-gitgutter ---+ let g:gitgutter_realtime = 1 let g:gitgutter_eager = 1 From 1c26f4bac2cdc9e152859f6ae6e59b62d48f5c5f Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Thu, 16 Nov 2017 21:24:38 +0100 Subject: [PATCH 077/214] Remove default enabled "list" option The "list" option was enabled by default causing problems when using copy & paste within Vim with OS- or terminal emulator specific functionalities. GH-72 --- snowblocks/vim/vimrc | 1 - 1 file changed, 1 deletion(-) diff --git a/snowblocks/vim/vimrc b/snowblocks/vim/vimrc index f3132fc..f4daa2c 100644 --- a/snowblocks/vim/vimrc +++ b/snowblocks/vim/vimrc @@ -225,7 +225,6 @@ set foldenable set foldlevelstart=10 set guicursor=a:ver25-Cursor/lCursor set linebreak -set list set listchars=eol:¬,space:·,tab:»\ set magic set mat=2 From 8a7cdd3f8e8f919d9d32519eaa0ce862e2218846 Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Fri, 17 Nov 2017 05:51:14 +0100 Subject: [PATCH 078/214] Create new "tilix" snowblock Includes a bookmarks.json.igloocrypt" (encrypted) file for the "igloo" and "archbook" and a dconf (1) dump of the configurations of the "com.gexperts.Tilix" schema. References: (1) https://wiki.gnome.org/Projects/dconf * https://gnunn1.github.io/tilix-web * https://github.com/gnunn1/tilix GH-70 --- snowblocks/tilix/README.md | 28 +++++++ .../tilix/bookmarks.json.igloo.igloocrypt | Bin 0 -> 850 bytes snowblocks/tilix/config.dconf | 75 ++++++++++++++++++ snowblocks/tilix/snowblock.json | 16 ++++ 4 files changed, 119 insertions(+) create mode 100644 snowblocks/tilix/README.md create mode 100644 snowblocks/tilix/bookmarks.json.igloo.igloocrypt create mode 100644 snowblocks/tilix/config.dconf create mode 100644 snowblocks/tilix/snowblock.json diff --git a/snowblocks/tilix/README.md b/snowblocks/tilix/README.md new file mode 100644 index 0000000..1e6588b --- /dev/null +++ b/snowblocks/tilix/README.md @@ -0,0 +1,28 @@ +* [dconf Configuration](#dconf-configuration) +* [Nord Color Scheme](#nord-color-scheme) +* [References][#references] + +# dconf Configuration + +The [dconf][dconf] dump [`config.dconf`][config-dconf-gh] provides configurations for the `com.gexperts.Tilix` Tilix schema and can be loaded via `dconf` by run + +```sh +dconf load /com/gexperts/Tilix/ < config.dconf +``` + +# Nord Color Scheme + +The [Nord Tilix][nord-tilix-gh] color scheme, included in the current [`config.dconf` dconf dump](##dconf-configuration), is installed through the AUR [`nord-tilix`][nord-tilix-aur] package version `0.3.0-2`. + +# References + +* [Official Tilix Website][tilix] +* [Tilix GitHub Repository][tilix-gh] +* [Official *dconf* GNOME Project Website][dconf] + +[config-dconf-gh]: https://github.com/arcticicestudio/igloo/blob/develop/snowblocks/tilix/config.dconf +[dconf]: https://wiki.gnome.org/Projects/dconf +[nord-tilix-aur]: https://aur.archlinux.org/packages/nord-tilix +[nord-tilix-gh]: https://github.com/arcticicestudio/nord-tilix +[tilix]: https://gnunn1.github.io/tilix-web +[tilix-gh]: https://github.com/gnunn1/tilix diff --git a/snowblocks/tilix/bookmarks.json.igloo.igloocrypt b/snowblocks/tilix/bookmarks.json.igloo.igloocrypt new file mode 100644 index 0000000000000000000000000000000000000000..86f78ea0657d37f4321beca3ec3575bece88f6de GIT binary patch literal 850 zcmV-Y1Figp0t^H4xkqa?CzqW85CEyI%9S=2bpd#fe%(jotX$}@2m-+4?gO`~0G3CqM>v;1y zK9La;NFsUlvmo@J8Ec@6{cWxgJ}rcS<;Qod z>-(n<#TdmMJM8{b|G(0}fC15L$;NDM(sp*+(s8o}(e#G6jkzcJFiqRnpLqyFU*)+q zF3Va9kOuLnW&Fu!4Hb1I*Vc5pN6W)wOK0pDa;pf3H3x=S>@Keo+2uBvwaSq3;XGtF zCUH!gg+Fi)SZWVZ3mPF=Agt|C+$R3=K36wYywYDy=3#grcC1rp6yB;m0PK-0fCcZK z!UAUw47EDldovZ&I1L9PNhJ_z zu>vXZy6p%GkfbXZhSaZlN-=;UK;^a)-9j-9at~d1itZ$)>_|NhD8HhTt>^KQ2|%~{ zLv^bYLF)h%Qm0^EE^US=armR`82Rn@I(W24=};}6>Tb!}!yW(!sU8;Mf@terYHP3W c%tl7L(0yYr+B&HFy#S=z0W&3}g8%>k literal 0 HcmV?d00001 diff --git a/snowblocks/tilix/config.dconf b/snowblocks/tilix/config.dconf new file mode 100644 index 0000000..5f37e3d --- /dev/null +++ b/snowblocks/tilix/config.dconf @@ -0,0 +1,75 @@ +[/] +quake-hide-lose-focus-delay=150 +prompt-on-close=true +quake-hide-lose-focus=true +close-with-last-session=true +tab-position='top' +session-name='igloo' +app-title='igloo' +theme-variant='system' +new-instance-mode='new-session' +window-style='normal' +unsafe-paste-alert=true +window-save-state=true +auto-hide-mouse=true +sidebar-on-right=false +new-window-inherit-state=true +control-click-titlebar=true +warn-vte-config-issue=false +enable-wide-handle=false +quake-show-on-all-workspaces=true +background-image-mode='scale' +quake-height-percent=45 +quake-hide-headerbar=true +custom-hyperlinks=@as [] +use-tabs=false +terminal-title-style='none' +terminal-title-show-when-single=true +quake-width-percent=66 + +[keybindings] +session-synchronize-input='s' +session-save='disabled' + +[profiles] +list=['2b7c4080-0ddd-46c5-8f23-563fd3ba789d'] +default='2b7c4080-0ddd-46c5-8f23-563fd3ba789d' + +[profiles/2b7c4080-0ddd-46c5-8f23-563fd3ba789d] +cursor-shape='ibeam' +cursor-colors-set=true +bold-color-set=false +terminal-bell='sound' +cjk-utf8-ambiguous-width='narrow' +default-size-rows=26 +terminal-title='igloo' +use-theme-colors=false +automatic-switch=@as [] +visible-name='nord' +login-shell=false +exit-action='close' +use-system-font=false +foreground-color='#D8DEE9' +dim-color='#3B3B42425252' +background-transparency-percent=0 +cursor-blink-mode='system' +dim-transparency-percent=0 +default-size-columns=86 +background-color='#2E3440' +palette=['#3B4252', '#BF616A', '#A3BE8C', '#EBCB8B', '#81A1C1', '#B48EAD', '#88C0D0', '#E5E9F0', '#4C566A', '#BF616A', '#A3BE8C', '#EBCB8B', '#81A1C1', '#B48EAD', '#8FBCBB', '#ECEFF4'] +notify-silence-threshold=0 +cursor-foreground-color='#2E2E34344040' +allow-bold=true +badge-color='#8888C0C0D0D0' +highlight-foreground-color='#2E2E34344040' +font='Source Code Pro Medium 12' +custom-hyperlinks=@as [] +scrollback-unlimited=true +dim-color-set=false +cursor-background-color='#D8D8DEDEE9E9' +highlight-background-color='#8888C0C0D0D0' +scroll-on-output=true +badge-color-set=false +highlight-colors-set=false +scrollback-lines=5000 +show-scrollbar=false diff --git a/snowblocks/tilix/snowblock.json b/snowblocks/tilix/snowblock.json new file mode 100644 index 0000000..a25a4a1 --- /dev/null +++ b/snowblocks/tilix/snowblock.json @@ -0,0 +1,16 @@ +[ + { + "clean": ["~/.config/tilix"] + }, + { + "link": { + "~/.config/tilix/bookmarks.json": { + "create": true, + "hosts": { + "archbook": "bookmarks.json.archbook.igloocrypt", + "igloo": "bookmarks.json.igloo.igloocrypt" + } + } + } + } +] From f6309e80b0a0e608846a5941d0b8b6016c97e6b0 Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Mon, 27 Nov 2017 21:28:22 +0100 Subject: [PATCH 079/214] Create new "xdg" snowblock Includes configurations for various freedesktop (1) XDG specifications: * user-specific .desktop application files (2) * user-specific autostart .desktop files (3) * XDG user directories (4) configurations * document templates * XDG bookmarks (5) (1) https://freedesktop.org (2) https://wiki.archlinux.org/index.php/Desktop_entries (3) https://specifications.freedesktop.org/autostart-spec/autostart-spec-latest.html (4) https://wiki.archlinux.org/index.php/XDG_user_directories (5) https://www.freedesktop.org/wiki/Specifications/desktop-bookmark-spec/ GH-74 --- .gitignore | 4 +- snowblocks/xdg/README.md | 39 ++++++ snowblocks/xdg/applications/atom.desktop | 12 ++ snowblocks/xdg/applications/evolution.desktop | 14 +++ snowblocks/xdg/applications/gpick.desktop | 7 ++ snowblocks/xdg/applications/gtkhash.desktop | 7 ++ .../xdg/applications/intellij-idea-ce.desktop | 5 + .../xdg/applications/intellij-idea-u.desktop | 5 + snowblocks/xdg/applications/minecraft.desktop | 6 + .../applications/org.gnome.Nautilus.desktop | 14 +++ .../applications/org.gnome.Screenshot.desktop | 24 ++++ .../xdg/applications/org.gnome.gedit.desktop | 8 ++ .../applications/pycharm-community.desktop | 5 + .../xdg/applications/shotwell-viewer.desktop | 5 + snowblocks/xdg/applications/webstorm.desktop | 5 + snowblocks/xdg/autostart/dropbox.desktop | 5 + .../xdg/autostart/plank.desktop.archbook | 5 + snowblocks/xdg/autostart/plank.desktop.igloo | 5 + .../xdg/gtk-3.0/bookmarks.archbook.igloocrypt | Bin 0 -> 761 bytes .../xdg/gtk-3.0/bookmarks.igloo.igloocrypt | Bin 0 -> 759 bytes snowblocks/xdg/gtk-3.0/settings.ini | 11 ++ snowblocks/xdg/snowblock.json | 114 ++++++++++++++++++ snowblocks/xdg/user-dirs.conf | 11 ++ snowblocks/xdg/user-dirs.dirs | 17 +++ snowblocks/xdg/user-dirs.locale | 1 + 25 files changed, 328 insertions(+), 1 deletion(-) create mode 100644 snowblocks/xdg/README.md create mode 100644 snowblocks/xdg/applications/atom.desktop create mode 100644 snowblocks/xdg/applications/evolution.desktop create mode 100644 snowblocks/xdg/applications/gpick.desktop create mode 100644 snowblocks/xdg/applications/gtkhash.desktop create mode 100644 snowblocks/xdg/applications/intellij-idea-ce.desktop create mode 100644 snowblocks/xdg/applications/intellij-idea-u.desktop create mode 100644 snowblocks/xdg/applications/minecraft.desktop create mode 100644 snowblocks/xdg/applications/org.gnome.Nautilus.desktop create mode 100644 snowblocks/xdg/applications/org.gnome.Screenshot.desktop create mode 100644 snowblocks/xdg/applications/org.gnome.gedit.desktop create mode 100644 snowblocks/xdg/applications/pycharm-community.desktop create mode 100644 snowblocks/xdg/applications/shotwell-viewer.desktop create mode 100644 snowblocks/xdg/applications/webstorm.desktop create mode 100644 snowblocks/xdg/autostart/dropbox.desktop create mode 100644 snowblocks/xdg/autostart/plank.desktop.archbook create mode 100644 snowblocks/xdg/autostart/plank.desktop.igloo create mode 100644 snowblocks/xdg/gtk-3.0/bookmarks.archbook.igloocrypt create mode 100644 snowblocks/xdg/gtk-3.0/bookmarks.igloo.igloocrypt create mode 100644 snowblocks/xdg/gtk-3.0/settings.ini create mode 100644 snowblocks/xdg/snowblock.json create mode 100644 snowblocks/xdg/user-dirs.conf create mode 100644 snowblocks/xdg/user-dirs.dirs create mode 100644 snowblocks/xdg/user-dirs.locale diff --git a/.gitignore b/.gitignore index 7a2d608..5be00d4 100644 --- a/.gitignore +++ b/.gitignore @@ -5,6 +5,8 @@ snowblocks/bash/**/*.local snowblocks/bash/.log - # +--- git ---+ snowblocks/git/gitconfig_auth_job + +# +--- xdg ---+ +snowblocks/xdg/applications/mimeinfo.cache diff --git a/snowblocks/xdg/README.md b/snowblocks/xdg/README.md new file mode 100644 index 0000000..3b88b90 --- /dev/null +++ b/snowblocks/xdg/README.md @@ -0,0 +1,39 @@ +* [Application Desktop Entries](#application-desktop-entries) +* [Autostart](#autostart) +* [Bookmarks](#bookmarks) +* [User Directories](#user-directories) + +### Application Desktop Entries + +All application `*.desktop` entry files adhere the freedesktop [Desktop Entry Specification][fd-spec-desktop-entry]. + +Read the [Arch Linux Wiki][archw-desktop-entries] site for detailed information and examples. + +### Autostart + +In an XDG-compliant desktop environment, such as GNOME, the desktop environment will automatically start `*.desktop` files found in the directories specified in the [Desktop Application Autostart Specification][fd-spec-autostart]: + +* System-wide: `$XDG_CONFIG_DIRS/autostart/` (`/etc/xdg/autostart/` by default) + * GNOME also starts files found in `/usr/share/gnome/autostart/` +* User-specific: `$XDG_CONFIG_HOME/autostart/` (`~/.config/autostart/` by default) + +System-wide `*.desktop` files can be overridden via the user-specific `~/.config/autostart/` folder. + +References: + +* [Arch Linux Wiki - Desktop Entries (Autostart)][archw-desktop-entries-autostart] + +### Bookmarks + +All bookmark configurations adhere the freedesktop [Desktop Bookmark Specification][fd-spec-bookmark]. + +### User Directories + +All user directory configurations adhere the freedesktop [XDG user directories][archw-xdg-user-dir] specification. + +[archw-desktop-entries]: https://wiki.archlinux.org/index.php/Desktop_entries +[archw-desktop-entries-autostart]: https://wiki.archlinux.org/index.php/Desktop_entries#Autostart +[archw-xdg-user-dir]: https://wiki.archlinux.org/index.php/XDG_user_directories +[fd-spec-autostart]: https://specifications.freedesktop.org/autostart-spec/autostart-spec-latest.html +[fd-spec-bookmark]: https://www.freedesktop.org/wiki/Specifications/desktop-bookmark-spec/ +[fd-spec-desktop-entry]: https://specifications.freedesktop.org/desktop-entry-spec/latest/ diff --git a/snowblocks/xdg/applications/atom.desktop b/snowblocks/xdg/applications/atom.desktop new file mode 100644 index 0000000..049526b --- /dev/null +++ b/snowblocks/xdg/applications/atom.desktop @@ -0,0 +1,12 @@ +[Desktop Entry] +Type=Application +Name=Atom +Icon=atom +Exec=electron --app=/usr/lib/atom %F +StartupNotify=true +MimeType=text/plain;text/css;text/java;text/md;text/markupdescription;text/readme;text/h;text/c;text/cpp;text/cp;text/js;text/xml;text/schema;text/x-sass;text/x-less; +Actions=dev-mode; + +[Desktop Action dev-mode] +Name=DevMode +Exec=atom --dev diff --git a/snowblocks/xdg/applications/evolution.desktop b/snowblocks/xdg/applications/evolution.desktop new file mode 100644 index 0000000..525b3c7 --- /dev/null +++ b/snowblocks/xdg/applications/evolution.desktop @@ -0,0 +1,14 @@ +[Desktop Entry] +Type=Application +Name=Evolution +Exec=evolution --offline %U +Icon=evolution +StartupNotify=true +X-GNOME-UsesNotifications=true +MimeType=text/calendar;text/x-vcard;text/directory;application/mbox;message/rfc822;x-scheme-handler/mailto; +Keywords=email;calendar;contact;addressbook;task; +Actions=compose; + +[Desktop Action compose] +Name=Compose a message +Exec=evolution mailto: diff --git a/snowblocks/xdg/applications/gpick.desktop b/snowblocks/xdg/applications/gpick.desktop new file mode 100644 index 0000000..ed45d29 --- /dev/null +++ b/snowblocks/xdg/applications/gpick.desktop @@ -0,0 +1,7 @@ +[Desktop Entry] +Type=Application +Name=Gpick +Icon=gpick +Exec=gpick +StartupNotify=true +MimeType=text/x-utility;application/x-gpick-color-palette; diff --git a/snowblocks/xdg/applications/gtkhash.desktop b/snowblocks/xdg/applications/gtkhash.desktop new file mode 100644 index 0000000..3d8530e --- /dev/null +++ b/snowblocks/xdg/applications/gtkhash.desktop @@ -0,0 +1,7 @@ +[Desktop Entry] +Type=Application +Name=GtkHash +Icon=gtkhash +Exec=gtkhash +StartupNotify=true +Keywords=hash;checksum;digest;md5;sha1;sha256;sha512;whirlpool;crc32 diff --git a/snowblocks/xdg/applications/intellij-idea-ce.desktop b/snowblocks/xdg/applications/intellij-idea-ce.desktop new file mode 100644 index 0000000..40933f1 --- /dev/null +++ b/snowblocks/xdg/applications/intellij-idea-ce.desktop @@ -0,0 +1,5 @@ +[Desktop Entry] +Type=Application +Name=IntelliJ IDEA Community Edition +Icon=intellij-idea-ce +Exec=/opt/intellij-idea-ce/bin/idea.sh diff --git a/snowblocks/xdg/applications/intellij-idea-u.desktop b/snowblocks/xdg/applications/intellij-idea-u.desktop new file mode 100644 index 0000000..6ea8b4e --- /dev/null +++ b/snowblocks/xdg/applications/intellij-idea-u.desktop @@ -0,0 +1,5 @@ +[Desktop Entry] +Type=Application +Name=IntelliJ IDEA Ultimate +Icon=intellij-idea +Exec=/opt/intellij-idea-u/bin/idea.sh diff --git a/snowblocks/xdg/applications/minecraft.desktop b/snowblocks/xdg/applications/minecraft.desktop new file mode 100644 index 0000000..018e88a --- /dev/null +++ b/snowblocks/xdg/applications/minecraft.desktop @@ -0,0 +1,6 @@ +[Desktop Entry] +Type=Application +Name=Minecraft +Icon=minecraft +Exec=/opt/minecraft-launcher/minecraft-launcher.sh +Path=/opt/minecraft-launcher diff --git a/snowblocks/xdg/applications/org.gnome.Nautilus.desktop b/snowblocks/xdg/applications/org.gnome.Nautilus.desktop new file mode 100644 index 0000000..5c848de --- /dev/null +++ b/snowblocks/xdg/applications/org.gnome.Nautilus.desktop @@ -0,0 +1,14 @@ +[Desktop Entry] +Type=Application +Name=Nautilus +Icon=org.gnome.Nautilus +Exec=nautilus --new-window %U +DBusActivatable=true +Actions=new-window; +StartupNotify=true +MimeType=inode/directory;application/x-gnome-saved-search; +X-GNOME-UsesNotifications=true + +[Desktop Action new-window] +Name=New Window +Exec=nautilus --new-window diff --git a/snowblocks/xdg/applications/org.gnome.Screenshot.desktop b/snowblocks/xdg/applications/org.gnome.Screenshot.desktop new file mode 100644 index 0000000..0a7ac4a --- /dev/null +++ b/snowblocks/xdg/applications/org.gnome.Screenshot.desktop @@ -0,0 +1,24 @@ +[Desktop Entry] +Type=Application +Name=Screenshot +Icon=applets-screenshooter +Exec=gnome-screenshot --interactive +DBusActivatable=true +Actions=area;window;window-shadow;screen; +StartupNotify=true + +[Desktop Action area] +Name=Area +Exec=gnome-screenshot --area + +[Desktop Action window] +Name=Window +Exec=gnome-screenshot --window --delay=3 + +[Desktop Action window-shadow] +Name=Window (Shadow) +Exec=gnome-screenshot --window --delay=3 --border-effect=shadow + +[Desktop Action screen] +Name=Screen +Exec=gnome-screenshot --delay=3 diff --git a/snowblocks/xdg/applications/org.gnome.gedit.desktop b/snowblocks/xdg/applications/org.gnome.gedit.desktop new file mode 100644 index 0000000..e4a22a1 --- /dev/null +++ b/snowblocks/xdg/applications/org.gnome.gedit.desktop @@ -0,0 +1,8 @@ +[Desktop Entry] +Type=Application +Name=Gedit +Icon=gedit +Exec=gedit %U +StartupNotify=true +DBusActivatable=true +MimeType=text/plain;text/css;text/java;text/md;text/markupdescription;text/markdown;text/github-flavored-markdown;text/readme;text/h;text/c;text/cpp;text/cp;text/js;text/xml;text/schema; diff --git a/snowblocks/xdg/applications/pycharm-community.desktop b/snowblocks/xdg/applications/pycharm-community.desktop new file mode 100644 index 0000000..c43f5fb --- /dev/null +++ b/snowblocks/xdg/applications/pycharm-community.desktop @@ -0,0 +1,5 @@ +[Desktop Entry] +Type=Application +Name=PyCharm Community +Icon=pycharm +Exec=/opt/pycharm-community/bin/pycharm.sh diff --git a/snowblocks/xdg/applications/shotwell-viewer.desktop b/snowblocks/xdg/applications/shotwell-viewer.desktop new file mode 100644 index 0000000..86a0f30 --- /dev/null +++ b/snowblocks/xdg/applications/shotwell-viewer.desktop @@ -0,0 +1,5 @@ +[Desktop Entry] +Type=Application +Name=Shotwell Viewer +NoDisplay=true +Exec= diff --git a/snowblocks/xdg/applications/webstorm.desktop b/snowblocks/xdg/applications/webstorm.desktop new file mode 100644 index 0000000..3f5e553 --- /dev/null +++ b/snowblocks/xdg/applications/webstorm.desktop @@ -0,0 +1,5 @@ +[Desktop Entry] +Type=Application +Name=WebStorm +Icon=webstorm +Exec=/opt/webstorm/bin/webstorm.sh diff --git a/snowblocks/xdg/autostart/dropbox.desktop b/snowblocks/xdg/autostart/dropbox.desktop new file mode 100644 index 0000000..ca30367 --- /dev/null +++ b/snowblocks/xdg/autostart/dropbox.desktop @@ -0,0 +1,5 @@ +[Desktop Entry] +Type=Application +Name=Dropbox +Exec=dropbox +Icon=dropbox diff --git a/snowblocks/xdg/autostart/plank.desktop.archbook b/snowblocks/xdg/autostart/plank.desktop.archbook new file mode 100644 index 0000000..cc0f0d0 --- /dev/null +++ b/snowblocks/xdg/autostart/plank.desktop.archbook @@ -0,0 +1,5 @@ +[Desktop Entry] +Name=Plank +Type=Application +Exec=plank -n archbook +Icon=plank diff --git a/snowblocks/xdg/autostart/plank.desktop.igloo b/snowblocks/xdg/autostart/plank.desktop.igloo new file mode 100644 index 0000000..73910b7 --- /dev/null +++ b/snowblocks/xdg/autostart/plank.desktop.igloo @@ -0,0 +1,5 @@ +[Desktop Entry] +Name=Plank +Type=Application +Exec=plank -n igloo +Icon=plank diff --git a/snowblocks/xdg/gtk-3.0/bookmarks.archbook.igloocrypt b/snowblocks/xdg/gtk-3.0/bookmarks.archbook.igloocrypt new file mode 100644 index 0000000000000000000000000000000000000000..2ff68c0b91cfafb50f5515d396b31fd9ae7d6e92 GIT binary patch literal 761 zcmVQ7BgcE+vykTtDl$skyoav9*VIP zg%MyLpaCKM!e>+7+c9PP!O9~vgMi&vC`R?~R^VUdLSsd9JtW2qF9P3j6+c7ipWUa? zP0Y4EZQL$Ov`0Ve>2xPBck9i6I<;_5+o-p)kc8_dycsP_X3QQC)v6t9UH9s0^gLUr54yO-)$=&H;0MC^9cD?aOrd z1XN5iBF0|RvnGGuNB@j*LAgaJ0ZG_3;}#}BZattST?9*0_teC~mYgDYAUm0B5% z_`f7S4AZR1WW(aO|G^FaxU7X?X{|Gk4b5~aQDfVviEA}@4_B%oK8mDzSK}LxpFfDu z-=dH#6djYoTv9mFlVhGA>$bu;l-YQnspgWT_UL|UMwKh`53{A#C7iU4q>*XjK12qo zM%-RK8zH&FUoJ;nu6EMECjkxPzR*CQ@XAjFaS_N~B7}PkYeM#(3?+?we4=NPd1E#BCA9P-0gd{_KdJ2SUZpjlE>#Lv+-e%UmT*t77;1W`;m-?|{ rQ70A6!~(a$>lsAI#Vy1Vg0ve__x|j;6fF*n>Xnh$&RaJ*MvO^m&s}jy literal 0 HcmV?d00001 diff --git a/snowblocks/xdg/gtk-3.0/bookmarks.igloo.igloocrypt b/snowblocks/xdg/gtk-3.0/bookmarks.igloo.igloocrypt new file mode 100644 index 0000000000000000000000000000000000000000..77c656790b3a527179ef01b09051f4bdedad511f GIT binary patch literal 759 zcmV<2U_D1c5sK?VHn{#blWQzq{5RR7J9?XKo*JB~DislECIHW7CKXk^jD zW@r3l6z$?II)hFfKW0jQLw8AE(M+dDr-NnBa8#T*Mm`+(@LC7q)M4)QT|z9H=R%-$ zktoQ>=EyAOa>;)DPnHL^Lk2zRFdj56@)s&_X=%WTNO8hnx*J;UZ6CiC%X;s4s-5y> z`tE7Mu#^a!j=>n$(c?2KN8Vu?*se3}6aP6)jE%(_DM1`^bTvGFo6pjyrOc*u1%mlx zpl7Fe5!~#QduBOBHA%oca|K2C=1I1Vj?f|Mp#5UkETVoL_A zeJdrEN&)o7mkEV6-T+hY|1UWxAPTsIGVNYlvOA4k#*w}^^7;&^^b9K7d?34bU{vQ9 zNBbF5JwxL^KY7%P3)5nD`;Qbnb8~?kAhge#+*WSOkg=EWY<@s-pU1WimActts8LI$ zc!hJ;lK@!xcZ0k3>R!3mgj#3`Pr$pXsKr`vAG(srmL4{CLa0Q0U$?fS;aOlqe#Z{$ zK6NpxN(BQIEcYiv>(|o2B>_R6_<@d>bu+1U*em957w!}SrtPuf2U6_xniL;d;CaOs2d-sf8hUP86x@@JcwE%&y@#J+OtORg@#F zVJ10Lk~wIsleS*t!7=a!dGnEtZeEN34Pj}hudTnc|H^0>kw(@!W%zOK_krHZ-X~u(v;)*YgAV0spQ|}T_O=%CO;YFM`DiXgMHaOZ)9(04M)f5rsIN%U_md#ca8u6 literal 0 HcmV?d00001 diff --git a/snowblocks/xdg/gtk-3.0/settings.ini b/snowblocks/xdg/gtk-3.0/settings.ini new file mode 100644 index 0000000..bed147b --- /dev/null +++ b/snowblocks/xdg/gtk-3.0/settings.ini @@ -0,0 +1,11 @@ +# Copyright (c) 2016-2017 Arctic Ice Studio +# Copyright (c) 2016-2017 Sven Greb + +# Project: igloo +# Repository: https://github.com/arcticicestudio/igloo +# License: MIT + +[Settings] +gtk-application-prefer-dark-theme=0 +gtk-button-images=1 +gtk-menu-images=0 diff --git a/snowblocks/xdg/snowblock.json b/snowblocks/xdg/snowblock.json new file mode 100644 index 0000000..fe3a293 --- /dev/null +++ b/snowblocks/xdg/snowblock.json @@ -0,0 +1,114 @@ +[ + { + "clean": [ + "~/.config", + "~/.config/autostart", + "~/.config/gtk-3.0", + "~/.local/share/applications" + ] + }, + { + "link": { + "~/.config/user-dirs.conf": { + "force": true + }, + "~/.config/user-dirs.dirs": { + "force": true + }, + "~/.config/user-dirs.locale": { + "force": true + }, + "~/.config/gtk-3.0/bookmarks": { + "create": true, + "force": true, + "hosts": { + "archbook": "gtk-3.0/bookmarks.archbook.igloocrypt", + "igloo": "gtk-3.0/bookmarks.igloo.igloocrypt" + } + }, + "~/.local/share/applications/atom.desktop": { + "create": true, + "force": true, + "path": "applications/atom.desktop" + }, + "~/.local/share/applications/evolution.desktop": { + "create": true, + "force": true, + "path": "applications/evolution.desktop" + }, + "~/.local/share/applications/gpick.desktop": { + "create": true, + "force": true, + "path": "applications/gpick.desktop" + }, + "~/.local/share/applications/gtkhash.desktop": { + "create": true, + "force": true, + "path": "applications/gtkhash.desktop" + }, + "~/.local/share/applications/intellij-idea-ce.desktop": { + "create": true, + "force": true, + "path": "applications/intellij-idea-ce.desktop" + }, + "~/.local/share/applications/intellij-idea-u.desktop": { + "create": true, + "force": true, + "path": "applications/intellij-idea-u.desktop" + }, + "~/.local/share/applications/minecraft.desktop": { + "create": true, + "force": true, + "path": "applications/minecraft.desktop" + }, + "~/.local/share/applications/org.gnome.gedit.desktop": { + "create": true, + "force": true, + "path": "applications/org.gnome.gedit.desktop" + }, + "~/.local/share/applications/org.gnome.Nautilus.desktop": { + "create": true, + "force": true, + "path": "applications/org.gnome.Nautilus.desktop" + }, + "~/.local/share/applications/org.gnome.Screenshot.desktop": { + "create": true, + "force": true, + "path": "applications/org.gnome.Screenshot.desktop" + }, + "~/.local/share/applications/pycharm-community.desktop": { + "create": true, + "force": true, + "path": "applications/pycharm-community.desktop" + }, + "~/.local/share/applications/shotwell-viewer.desktop": { + "create": true, + "force": true, + "path": "applications/shotwell-viewer.desktop" + }, + "~/.local/share/applications/webstorm.desktop": { + "create": true, + "force": true, + "path": "applications/webstorm.desktop" + }, + "~/.config/autostart/dropbox.desktop": { + "create": true, + "force": true, + "path": "autostart/dropbox.desktop" + }, + "~/.config/autostart/plank.desktop": { + "create": true, + "force": true, + "hosts": { + "archbook": "autostart/plank.desktop.archbook", + "igloo": "autostart/plank.desktop.igloo" + } + }, + "~/.config/gtk-3.0/settings.ini": { + "create": true, + "force": true, + "path": "gtk-3.0/settings.ini" + } + } + } +] diff --git a/snowblocks/xdg/user-dirs.conf b/snowblocks/xdg/user-dirs.conf new file mode 100644 index 0000000..f890a67 --- /dev/null +++ b/snowblocks/xdg/user-dirs.conf @@ -0,0 +1,11 @@ +# Copyright (c) 2016-2017 Arctic Ice Studio +# Copyright (c) 2016-2017 Sven Greb + +# Project: igloo +# Repository: https://github.com/arcticicestudio/igloo +# License: MIT + +# Prevent "xdg-user-dirs-update" to override custom user directories on login with default configurations. +enabled=False + +filename_encoding=UTF-8 diff --git a/snowblocks/xdg/user-dirs.dirs b/snowblocks/xdg/user-dirs.dirs new file mode 100644 index 0000000..462fc5b --- /dev/null +++ b/snowblocks/xdg/user-dirs.dirs @@ -0,0 +1,17 @@ +# Copyright (c) 2016-2017 Arctic Ice Studio +# Copyright (c) 2016-2017 Sven Greb + +# Project: igloo +# Repository: https://github.com/arcticicestudio/igloo +# License: MIT + +XDG_DESKTOP_DIR="$HOME/desktop" Desktop +XDG_DOCUMENTS_DIR="$HOME/documents" Documents +XDG_TEMPLATES_DIR="$HOME/code/scratchpad/gists" +XDG_DOWNLOAD_DIR="$HOME/downloads" Downloads +XDG_MUSIC_DIR="$HOME/music" Music +XDG_PICTURES_DIR="$HOME/images" Images +XDG_VIDEOS_DIR="$HOME/videos" Videos + +# Public share directory is currently disabled +#XDG_PUBLICSHARE_DIR="$HOME/public/share" diff --git a/snowblocks/xdg/user-dirs.locale b/snowblocks/xdg/user-dirs.locale new file mode 100644 index 0000000..3cc58df --- /dev/null +++ b/snowblocks/xdg/user-dirs.locale @@ -0,0 +1 @@ +C From 99da98a95a64d8d1e1a9ec9d7073b6bb8ecf72e0 Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Tue, 28 Nov 2017 14:57:11 +0100 Subject: [PATCH 080/214] Create new "systemd" snowflake It includes * documentations about and solutions on how to fix the instantaneous MacBook Pro (11,x) suspend wakeup problem after the lid has been closed (1) * documentation on how to configure the lid close behavior (2) * a custom suspend service (3) implementation and documentation * a "system-sleep" hook (4) implementation and documentation See "systemd.special(7)" (5) and "systemd.sleep(8)" (6) for more details. References: (1) https://wiki.archlinux.org/index.php/MacBookPro11,x#Suspend (2) https://wiki.archlinux.org/index.php/GNOME#Configure_behaviour_on_lid_switch_close (3) https://wiki.archlinux.org/index.php/Power_management#Combined_Suspend.2Fresume_service_file (4) https://wiki.archlinux.org/index.php/Power_management#Hooks_in_.2Fusr.2Flib.2Fsystemd.2Fsystem-sleep (5) https://www.freedesktop.org/software/systemd/man/sleep.conf.d.html (6) https://www.freedesktop.org/software/systemd/man/systemd.special.html GH-76 --- snowflakes/systemd/README.md | 72 +++++++++++++++++++ .../igloo-mbp-lid-suspend.sh.archbook | 13 ++++ .../igloo-mbp-lid-suspend.service.archbook | 19 +++++ 3 files changed, 104 insertions(+) create mode 100644 snowflakes/systemd/README.md create mode 100644 snowflakes/systemd/hooks/system-sleep/igloo-mbp-lid-suspend.sh.archbook create mode 100644 snowflakes/systemd/units/system/igloo-mbp-lid-suspend.service.archbook diff --git a/snowflakes/systemd/README.md b/snowflakes/systemd/README.md new file mode 100644 index 0000000..186d38f --- /dev/null +++ b/snowflakes/systemd/README.md @@ -0,0 +1,72 @@ +* [Troubleshooting](#troubleshooting) + * [Fix instantaneous MacBook Pro suspend wakeup after lid close](#fix-instantaneous-macbook-pro-suspend-wakeup-after-lid-close) + * [lid close behavior](#lid-close-behavior) + * [custom suspend service](#custom-suspend-service) + * [`system-sleep` hook](#system-sleep-hook) + +# Troubleshooting + +## Fix instantaneous MacBook Pro suspend wakeup after lid close + +When closing the lid of a MacBook Pro (11,x) it will wakeup instantly instead of going into the suspend mode. This is caused by the `XHC1` device (USB ports) which is enabled (default) to fire a ACPI suspend wakeup event. + +In order to prevent immediate wakeup after the lid has been closed the `XHC1` device must be disabled. This can be achieved by either using a [custom systemd suspend service][archw-suspend-service] (recommended) or a [`system-sleep` hook][archw-system-sleep-hook]. Note that the problem has been reported to the Linux Kernel and should be fixed by [13cfc732160f][gh-lk-fix-commit], but still can occur on different devices. + +### lid close behavior + +Make sure to [configure the behavior on lid close][archw-gnome-lid-behavior] before installing the service or hook by either + +* use the automatic method via the GNOME Tweak Tool which can inhibit the *systemd* setting for the lid close ACPI event via the *Power* > *Suspend when laptop lid is closed* option. +* set the `HandleLidSwitch=suspend` option in `/etc/systemd/logind.conf` to let *systemd* handle the [ACPI event][archw-pw-mng-acpi-event]. + +The changes will be applied after the `systemd-logind` daemon has been restarted which will terminate all currently open user sessions. + +### custom suspend service + +Install the [`igloo-mbp-lid-suspend.service.archbook`][gh-unit-suspend] suspend/resume service file, a single hook that does all the work for different phases (sleep/resume) and for different targets (suspend/hibernate/hybrid-sleep). + +```sh +sudo cp snowflakes/systemd/units/system/igloo-mbp-lid-suspend.service.archbook /lib/systemd/system/igloo-mbp-lid-suspend.service +sudo systemctl daemon-reload +sudo systemctl enable igloo-mbp-lid-suspend.service +``` + +### `system-sleep` hook + +*systemd* runs all executables in `/usr/lib/systemd/system-sleep/`, passing two arguments to each of them: + +* either `pre` or `post`: Depending on whether the machine is going to *sleep* or *waking* up +* `suspend`, `hibernate` or `hybrid-sleep`: Depending on which is being invoked + +Install the [`igloo-mbp-lid-suspend.service.sh.archbook`][gh-hook-system-sleep] *system-sleep* hook: + +```sh +sudo cp snowflakes/systemd/hooks/system-sleep/igloo-mbp-lid-suspend.service.sh.archbook /lib/systemd/system-sleep/igloo-mbp-lid-suspend.service.sh +sudo systemctl daemon-reload +``` + +The output of any custom script will be logged by `systemd-suspend.service`, `systemd-hibernate.service` or `systemd-hybrid-sleep.service` which can be shown with *systemd*'s [journal][archw-journal]: + +```sh +journalctl -b -u systemd-suspend +``` + +See [systemd.special(7)][man-systemd.special] and [systemd.sleep(8)][man-systemd.sleep] for more details. + +References: + +* [MacBook Pro 11,x Suspend][archw-mbp-11x-suspend] +* [Instantaneous wakeups from suspend][archw-pw-mng-inst-wakeup] + +[archw-journal]: https://wiki.archlinux.org/index.php/Systemd#Journal +[archw-gnome-lid-behavior]: https://wiki.archlinux.org/index.php/GNOME#Configure_behaviour_on_lid_switch_close +[archw-mbp-11x-suspend]: https://wiki.archlinux.org/index.php/MacBookPro11,x#Suspend +[archw-pw-mng-acpi-event]: https://wiki.archlinux.org/index.php/Power_management#ACPI_events +[archw-pw-mng-inst-wakeup]: https://wiki.archlinux.org/index.php/Power_management/Suspend_and_hibernate#Instantaneous_wakeups_from_suspend +[archw-suspend-service]: https://wiki.archlinux.org/index.php/Power_management#Combined_Suspend.2Fresume_service_file +[archw-system-sleep-hook]: https://wiki.archlinux.org/index.php/Power_management#Hooks_in_.2Fusr.2Flib.2Fsystemd.2Fsystem-sleep +[gh-hook-system-sleep]: https://github.com/arcticicestudio/igloo/blob/develop/snowflakes/systemd/hooks/system-sleep/igloo-mbp-lid-suspend.sh.archbook +[gh-lk-fix-commit]: https://github.com/torvalds/linux/commit/13cfc732160f7bc7e596128ce34cda361c556966 +[gh-unit-suspend]: https://github.com/arcticicestudio/igloo/blob/develop/snowflakes/systemd/units/system/igloo-mbp-lid-suspend.service.archbook +[man-systemd.sleep]: https://www.freedesktop.org/software/systemd/man/sleep.conf.d.html +[man-systemd.special]: https://www.freedesktop.org/software/systemd/man/systemd.special.html diff --git a/snowflakes/systemd/hooks/system-sleep/igloo-mbp-lid-suspend.sh.archbook b/snowflakes/systemd/hooks/system-sleep/igloo-mbp-lid-suspend.sh.archbook new file mode 100644 index 0000000..f28e559 --- /dev/null +++ b/snowflakes/systemd/hooks/system-sleep/igloo-mbp-lid-suspend.sh.archbook @@ -0,0 +1,13 @@ +#!/bin/sh +# Copyright (c) 2016-2017 Arctic Ice Studio +# Copyright (c) 2016-2017 Sven Greb + +# Project: igloo +# Repository: https://github.com/arcticicestudio/igloo +# License: MIT + +case $1 in + pre|suspend|hibernate) grep 'XHC1[[:space:]]\+S[1-5][[:space:]]\+\*disabled' /proc/acpi/wakeup || echo XHC1 > /proc/acpi/wakeup ;; + *) exit $NA ;; +esac +exit 0 diff --git a/snowflakes/systemd/units/system/igloo-mbp-lid-suspend.service.archbook b/snowflakes/systemd/units/system/igloo-mbp-lid-suspend.service.archbook new file mode 100644 index 0000000..772f84c --- /dev/null +++ b/snowflakes/systemd/units/system/igloo-mbp-lid-suspend.service.archbook @@ -0,0 +1,19 @@ +# Copyright (c) 2016-2017 Arctic Ice Studio +# Copyright (c) 2016-2017 Sven Greb + +# Project: igloo +# Repository: https://github.com/arcticicestudio/igloo +# License: MIT + +[Unit] +Description=MacBook Pro lid suspend +Before=sleep.target +StopWhenUnneeded=yes + +[Service] +Type=oneshot +RemainAfterExit=yes +ExecStart=/bin/sh -c "/usr/bin/echo XHC1 > /proc/acpi/wakeup" + +[Install] +WantedBy=sleep.target From 6f60096effff7bf6422a6b406281bba9b8acbac3 Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Tue, 28 Nov 2017 16:41:33 +0100 Subject: [PATCH 081/214] Create new snowblock for Plank Create a new snowblock for Plank (1) including * application launchers for the host specific "igloo" and "archbook" profiles * a minimal and non obstructive "igloo" theme with a transparent background and no shadow- and glow effects. References: (1) https://wiki.archlinux.org/index.php/Plank plank(1) GH-81 --- snowblocks/plank/README.md | 32 ++++++ .../plank/launchers/archbook/atom.dockitem | 2 + .../launchers/archbook/google-chrome.dockitem | 2 + .../archbook/intellij-idea-u.dockitem | 2 + .../archbook/org.gnome.Nautilus.dockitem | 2 + .../archbook/org.gnome.Screenshot.dockitem | 2 + .../archbook/pycharm-community.dockitem | 2 + .../launchers/archbook/webstorm.dockitem | 2 + .../plank/launchers/igloo/atom.dockitem | 2 + .../launchers/igloo/google-chrome.dockitem | 2 + .../launchers/igloo/intellij-idea-u.dockitem | 2 + .../igloo/org.gnome.Nautilus.dockitem | 2 + .../igloo/org.gnome.Screenshot.dockitem | 2 + .../igloo/pycharm-community.dockitem | 2 + .../plank/launchers/igloo/webstorm.dockitem | 2 + snowblocks/plank/plank.dconf | 24 +++++ snowblocks/plank/snowblock.json | 31 ++++++ snowblocks/plank/themes/igloo/dock.theme | 102 ++++++++++++++++++ 18 files changed, 217 insertions(+) create mode 100644 snowblocks/plank/README.md create mode 100644 snowblocks/plank/launchers/archbook/atom.dockitem create mode 100644 snowblocks/plank/launchers/archbook/google-chrome.dockitem create mode 100644 snowblocks/plank/launchers/archbook/intellij-idea-u.dockitem create mode 100644 snowblocks/plank/launchers/archbook/org.gnome.Nautilus.dockitem create mode 100644 snowblocks/plank/launchers/archbook/org.gnome.Screenshot.dockitem create mode 100644 snowblocks/plank/launchers/archbook/pycharm-community.dockitem create mode 100644 snowblocks/plank/launchers/archbook/webstorm.dockitem create mode 100644 snowblocks/plank/launchers/igloo/atom.dockitem create mode 100644 snowblocks/plank/launchers/igloo/google-chrome.dockitem create mode 100644 snowblocks/plank/launchers/igloo/intellij-idea-u.dockitem create mode 100644 snowblocks/plank/launchers/igloo/org.gnome.Nautilus.dockitem create mode 100644 snowblocks/plank/launchers/igloo/org.gnome.Screenshot.dockitem create mode 100644 snowblocks/plank/launchers/igloo/pycharm-community.dockitem create mode 100644 snowblocks/plank/launchers/igloo/webstorm.dockitem create mode 100644 snowblocks/plank/plank.dconf create mode 100644 snowblocks/plank/snowblock.json create mode 100755 snowblocks/plank/themes/igloo/dock.theme diff --git a/snowblocks/plank/README.md b/snowblocks/plank/README.md new file mode 100644 index 0000000..e7f60b9 --- /dev/null +++ b/snowblocks/plank/README.md @@ -0,0 +1,32 @@ +* [dconf Configuration](#dconf-configuration) +* [Autostart](#autostart) + +# dconf Configuration + +The [dconf][dconf] dump [`plank.dconf`][config-dconf-gh] provides configurations for the `net.launchpad.plank` schema and can be loaded via `dconf` by run + +```sh +dconf load /net/launchpad/plank/ < plank.dconf +``` + +A new dump can be exported via + +```sh +dconf dump /net/launchpad/plank/ > plank.dconf +``` + +# Autostart + +The [xdg snowblock][gh-sb-xdg] provides host specific [autostart][gh-sb-xdg-autostart] configurations for the [igloo][gh-sb-xdg-autostart-igloo] and [archbook][gh-sb-xdg-autostart-archbook] Plank launcher profiles. + +# References + +* [Plank GitHub Repository][plank-gh] + +[config-dconf-gh]: https://github.com/arcticicestudio/igloo/blob/develop/snowblocks/plank/plank.dconf +[dconf]: https://wiki.gnome.org/Projects/dconf +[gh-sb-xdg]: https://github.com/arcticicestudio/igloo/tree/develop/snowblocks/xdg +[gh-sb-xdg-autostart]: https://github.com/arcticicestudio/igloo/tree/develop/snowblocks/xdg/autostart +[gh-sb-xdg-autostart-archbook]: https://github.com/arcticicestudio/igloo/blob/develop/snowblocks/xdg/autostart/plank.desktop.archbook +[gh-sb-xdg-autostart-igloo]: https://github.com/arcticicestudio/igloo/blob/develop/snowblocks/xdg/autostart/plank.desktop.igloo +[plank-gh]: https://github.com/ricotz/plank diff --git a/snowblocks/plank/launchers/archbook/atom.dockitem b/snowblocks/plank/launchers/archbook/atom.dockitem new file mode 100644 index 0000000..e502f51 --- /dev/null +++ b/snowblocks/plank/launchers/archbook/atom.dockitem @@ -0,0 +1,2 @@ +[PlankDockItemPreferences] +Launcher=file:///home/sgreb/.local/share/applications/atom.desktop diff --git a/snowblocks/plank/launchers/archbook/google-chrome.dockitem b/snowblocks/plank/launchers/archbook/google-chrome.dockitem new file mode 100644 index 0000000..cd04294 --- /dev/null +++ b/snowblocks/plank/launchers/archbook/google-chrome.dockitem @@ -0,0 +1,2 @@ +[PlankDockItemPreferences] +Launcher=file:///usr/share/applications/google-chrome.desktop diff --git a/snowblocks/plank/launchers/archbook/intellij-idea-u.dockitem b/snowblocks/plank/launchers/archbook/intellij-idea-u.dockitem new file mode 100644 index 0000000..54f08a8 --- /dev/null +++ b/snowblocks/plank/launchers/archbook/intellij-idea-u.dockitem @@ -0,0 +1,2 @@ +[PlankDockItemPreferences] +Launcher=file:///home/sgreb/.local/share/applications/intellij-idea-u.desktop diff --git a/snowblocks/plank/launchers/archbook/org.gnome.Nautilus.dockitem b/snowblocks/plank/launchers/archbook/org.gnome.Nautilus.dockitem new file mode 100644 index 0000000..ae5f8d9 --- /dev/null +++ b/snowblocks/plank/launchers/archbook/org.gnome.Nautilus.dockitem @@ -0,0 +1,2 @@ +[PlankDockItemPreferences] +Launcher=file:///usr/share/applications/org.gnome.Nautilus.desktop diff --git a/snowblocks/plank/launchers/archbook/org.gnome.Screenshot.dockitem b/snowblocks/plank/launchers/archbook/org.gnome.Screenshot.dockitem new file mode 100644 index 0000000..33272ee --- /dev/null +++ b/snowblocks/plank/launchers/archbook/org.gnome.Screenshot.dockitem @@ -0,0 +1,2 @@ +[PlankDockItemPreferences] +Launcher=file:///usr/share/applications/org.gnome.Screenshot.desktop diff --git a/snowblocks/plank/launchers/archbook/pycharm-community.dockitem b/snowblocks/plank/launchers/archbook/pycharm-community.dockitem new file mode 100644 index 0000000..4ca2a94 --- /dev/null +++ b/snowblocks/plank/launchers/archbook/pycharm-community.dockitem @@ -0,0 +1,2 @@ +[PlankDockItemPreferences] +Launcher=file:///home/sgreb/.local/share/applications/pycharm-community.desktop diff --git a/snowblocks/plank/launchers/archbook/webstorm.dockitem b/snowblocks/plank/launchers/archbook/webstorm.dockitem new file mode 100644 index 0000000..5c0516f --- /dev/null +++ b/snowblocks/plank/launchers/archbook/webstorm.dockitem @@ -0,0 +1,2 @@ +[PlankDockItemPreferences] +Launcher=file:///home/sgreb/.local/share/applications/webstorm.desktop diff --git a/snowblocks/plank/launchers/igloo/atom.dockitem b/snowblocks/plank/launchers/igloo/atom.dockitem new file mode 100644 index 0000000..218481b --- /dev/null +++ b/snowblocks/plank/launchers/igloo/atom.dockitem @@ -0,0 +1,2 @@ +[PlankDockItemPreferences] +Launcher=file:///home/arcticicestudio/.local/share/applications/atom.desktop diff --git a/snowblocks/plank/launchers/igloo/google-chrome.dockitem b/snowblocks/plank/launchers/igloo/google-chrome.dockitem new file mode 100644 index 0000000..cd04294 --- /dev/null +++ b/snowblocks/plank/launchers/igloo/google-chrome.dockitem @@ -0,0 +1,2 @@ +[PlankDockItemPreferences] +Launcher=file:///usr/share/applications/google-chrome.desktop diff --git a/snowblocks/plank/launchers/igloo/intellij-idea-u.dockitem b/snowblocks/plank/launchers/igloo/intellij-idea-u.dockitem new file mode 100644 index 0000000..7d6fe14 --- /dev/null +++ b/snowblocks/plank/launchers/igloo/intellij-idea-u.dockitem @@ -0,0 +1,2 @@ +[PlankDockItemPreferences] +Launcher=file:///home/arcticicestudio/.local/share/applications/intellij-idea-u.desktop diff --git a/snowblocks/plank/launchers/igloo/org.gnome.Nautilus.dockitem b/snowblocks/plank/launchers/igloo/org.gnome.Nautilus.dockitem new file mode 100644 index 0000000..ae5f8d9 --- /dev/null +++ b/snowblocks/plank/launchers/igloo/org.gnome.Nautilus.dockitem @@ -0,0 +1,2 @@ +[PlankDockItemPreferences] +Launcher=file:///usr/share/applications/org.gnome.Nautilus.desktop diff --git a/snowblocks/plank/launchers/igloo/org.gnome.Screenshot.dockitem b/snowblocks/plank/launchers/igloo/org.gnome.Screenshot.dockitem new file mode 100644 index 0000000..33272ee --- /dev/null +++ b/snowblocks/plank/launchers/igloo/org.gnome.Screenshot.dockitem @@ -0,0 +1,2 @@ +[PlankDockItemPreferences] +Launcher=file:///usr/share/applications/org.gnome.Screenshot.desktop diff --git a/snowblocks/plank/launchers/igloo/pycharm-community.dockitem b/snowblocks/plank/launchers/igloo/pycharm-community.dockitem new file mode 100644 index 0000000..5404360 --- /dev/null +++ b/snowblocks/plank/launchers/igloo/pycharm-community.dockitem @@ -0,0 +1,2 @@ +[PlankDockItemPreferences] +Launcher=file:///home/arcticicestudio/.local/share/applications/pycharm-community.desktop diff --git a/snowblocks/plank/launchers/igloo/webstorm.dockitem b/snowblocks/plank/launchers/igloo/webstorm.dockitem new file mode 100644 index 0000000..5c5f5f0 --- /dev/null +++ b/snowblocks/plank/launchers/igloo/webstorm.dockitem @@ -0,0 +1,2 @@ +[PlankDockItemPreferences] +Launcher=file:///home/arcticicestudio/.local/share/applications/webstorm.desktop diff --git a/snowblocks/plank/plank.dconf b/snowblocks/plank/plank.dconf new file mode 100644 index 0000000..bbca69a --- /dev/null +++ b/snowblocks/plank/plank.dconf @@ -0,0 +1,24 @@ +[docks/igloo] +icon-size=48 +show-dock-item=false +position='bottom' +dock-items=['org.gnome.Nautilus.dockitem', 'google-chrome.dockitem', 'intellij-idea-u.dockitem', 'webstorm.dockitem', 'pycharm-community.dockitem', 'org.gnome.Screenshot.dockitem'] +unhide-delay=0 +items-alignment='center' +theme='igloo' +hide-mode='auto' +pinned-only=false +auto-pinning=true +alignment='center' +zoom-percent=150 +hide-delay=0 +zoom-enabled=true +monitor='' +lock-items=true +tooltips-enabled=true +pressure-reveal=false +offset=0 +current-workspace-only=false + +[/] +enabled-docks=['igloo'] diff --git a/snowblocks/plank/snowblock.json b/snowblocks/plank/snowblock.json new file mode 100644 index 0000000..e04f425 --- /dev/null +++ b/snowblocks/plank/snowblock.json @@ -0,0 +1,31 @@ +[ + { + "clean": [ + "~/.config", + "~/.local/share" + ] + }, + { + "link": { + "~/.config/plank/igloo/launchers": { + "create": true, + "force": true, + "hosts": { + "igloo": "launchers/igloo" + } + }, + "~/.config/plank/archbook/launchers": { + "create": true, + "force": true, + "hosts": { + "archbook": "launchers/archbook" + } + }, + "~/.local/share/plank/themes/igloo": { + "create": true, + "force": true, + "path": "themes/igloo" + } + } + } +] diff --git a/snowblocks/plank/themes/igloo/dock.theme b/snowblocks/plank/themes/igloo/dock.theme new file mode 100755 index 0000000..0aec848 --- /dev/null +++ b/snowblocks/plank/themes/igloo/dock.theme @@ -0,0 +1,102 @@ +# Copyright (c) 2016-2017 Arctic Ice Studio +# Copyright (c) 2016-2017 Sven Greb + +# Project: igloo +# Repository: https://github.com/arcticicestudio/igloo +# License: MIT +# References: +# plank(1) +# https://launchpad.net/plank +# https://wiki.archlinux.org/index.php/Plank + +# A minimal and non obstructive theme with a transparent background and no shadow- and glow effects. + +[PlankTheme] +# The roundness of the top corners. +TopRoundness=0 + +# The roundness of the bottom corners. +BottomRoundness=0 + +# The thickness (in pixels) of lines drawn. +LineWidth=0 + +# The color (RGBA) of the outer stroke. +OuterStrokeColor=22;;26;;38;;255 + +# The starting color (RGBA) of the fill gradient. +FillStartColor=53;;57;;69;;242 + +# The ending color (RGBA) of the fill gradient. +FillEndColor=53;;57;;69;;242 + +# The color (RGBA) of the inner stroke. +InnerStrokeColor=53;;57;;69;;0 + +[PlankDockTheme] +# The padding on the left/right dock edges, in tenths of a percent of IconSize. +HorizPadding=0 + +# The padding on the top dock edge, in tenths of a percent of IconSize. +TopPadding=-12 + +# The padding on the bottom dock edge, in tenths of a percent of IconSize. +BottomPadding=2 + +# The padding between items on the dock, in tenths of a percent of IconSize. +ItemPadding=2.5 + +# The size of item indicators, in tenths of a percent of IconSize. +IndicatorSize=4 + +# The size of the icon-shadow behind every item, in tenths of a percent of IconSize. +IconShadowSize=0 + +# The height (in percent of IconSize) to bounce an icon when the application sets urgent. +UrgentBounceHeight=1.6666666666666667 + +# The height (in percent of IconSize) to bounce an icon when launching an application. +LaunchBounceHeight=0.625 + +# The opacity value (0 to 1) to fade the dock to when hiding it. +FadeOpacity=1 + +# The amount of time (in ms) for click animations. +ClickTime=300 + +# The amount of time (in ms) to bounce an urgent icon. +UrgentBounceTime=0 + +# The amount of time (in ms) to bounce an icon when launching an application. +LaunchBounceTime=600 + +# The amount of time (in ms) for active window indicator animations. +ActiveTime=300 + +# The amount of time (in ms) to slide icons into/out of the dock. +SlideTime=300 + +# The time (in ms) to fade the dock in/out on a hide (if FadeOpacity is < 1). +FadeTime=250 + +# The time (in ms) to slide the dock in/out on a hide (if FadeOpacity is 1). +HideTime=250 + +# The size of the urgent glow (shown when dock is hidden), in tenths of a percent of IconSize. +GlowSize=0 + +# The total time (in ms) to show the hidden-dock urgent glow. +GlowTime=0 + +# The time (in ms) of each pulse of the hidden-dock urgent glow. +GlowPulseTime=0 + +# The hue-shift (-180 to 180) of the urgent indicator color. +UrgentHueShift=150 + +# The time (in ms) to move an item to its new position or its addition/removal to/from the dock. +ItemMoveTime=200 + +# Whether background and icons will unhide/hide with different speeds. +# The top-border of both will leave/hit the screen-edge at the same time. +CascadeHide=true From 9f4ea24cef3482b3a46e2f15dcda4777c264e478 Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Tue, 28 Nov 2017 17:51:46 +0100 Subject: [PATCH 082/214] Update paths to renamed code snippet folder GH-74 --- .../xdg/gtk-3.0/bookmarks.archbook.igloocrypt | Bin 761 -> 764 bytes .../xdg/gtk-3.0/bookmarks.igloo.igloocrypt | Bin 759 -> 762 bytes snowblocks/xdg/user-dirs.dirs | 2 +- 3 files changed, 1 insertion(+), 1 deletion(-) diff --git a/snowblocks/xdg/gtk-3.0/bookmarks.archbook.igloocrypt b/snowblocks/xdg/gtk-3.0/bookmarks.archbook.igloocrypt index 2ff68c0b91cfafb50f5515d396b31fd9ae7d6e92..46da4e6f151ef5fe827a3609679737085a1ecbc0 100644 GIT binary patch literal 764 zcmV zU0xNLfT1G?-o&*h*>tUHGP-@{W?a5E^!nR^~o#ikTHVBC(}ynIRYTyDVms#RNHIHxs{q>EA))2H*7+uAvN!C0a#-$f$hSddK{NO!aU~#`m1Dd8rO{Z?+3hDvvwYJ+UH7=yfx&~+ zyo%u6>1Xh#YNlk@83TR5zm+1?F7`8nztq({6`~`(@=J)n25hotc%k-ZcGr#M0Onvp ujh&LgwJWp=?mGYzedAxwBj;{aSF3zzEh-Xcs>)=0@Y}Zx`C_e4Mn|%Wv3ZmL literal 761 zcmVQ7BgcE+vykTtDl$skyoav9*VIP zg%MyLpaCKM!e>+7+c9PP!O9~vgMi&vC`R?~R^VUdLSsd9JtW2qF9P3j6+c7ipWUa? zP0Y4EZQL$Ov`0Ve>2xPBck9i6I<;_5+o-p)kc8_dycsP_X3QQC)v6t9UH9s0^gLUr54yO-)$=&H;0MC^9cD?aOrd z1XN5iBF0|RvnGGuNB@j*LAgaJ0ZG_3;}#}BZattST?9*0_teC~mYgDYAUm0B5% z_`f7S4AZR1WW(aO|G^FaxU7X?X{|Gk4b5~aQDfVviEA}@4_B%oK8mDzSK}LxpFfDu z-=dH#6djYoTv9mFlVhGA>$bu;l-YQnspgWT_UL|UMwKh`53{A#C7iU4q>*XjK12qo zM%-RK8zH&FUoJ;nu6EMECjkxPzR*CQ@XAjFaS_N~B7}PkYeM#(3?+?we4=NPd1E#BCA9P-0gd{_KdJ2SUZpjlE>#Lv+-e%UmT*t77;1W`;m-?|{ rQ70A6!~(a$>lsAI#Vy1Vg0ve__x|j;6fF*n>Xnh$&RaJ*MvO^m&s}jy diff --git a/snowblocks/xdg/gtk-3.0/bookmarks.igloo.igloocrypt b/snowblocks/xdg/gtk-3.0/bookmarks.igloo.igloocrypt index 77c656790b3a527179ef01b09051f4bdedad511f..994f0bf7c7188c33b51e12e3e46159247b5348c7 100644 GIT binary patch literal 762 zcmVv;{!(jYR$Kwj6R+Luk?2HzS z94p{lb}su^TCt>ZtOREJWJ)ZVB5NF|ECQ*ks+9?v|pjr^@=UEbyHU= zV!>HHvAXy!mcdr%ZeVT@Y`kz;bnym=H`YE`3SkgeeDooixu!Io06Q%zH813_?D1P{ zoY2)ee49uF9Jx^y4dGUv+@`@n;9R3vza3en%5Hu@(cw`q4EGCW7GpBZ0r5Xr#A08Q zB>0I68-=F>YzzDg2>f)ZG_No~^axaLw?EAcP^)0bwiuxmpntVtL9eX(kY?0FxnySx zP}FXQqgsA*IC`aOYnTyOU_ELo22KQbQO>GItE<^2!dEs=*;Rv0(?^s2W8c0DC3iH) z0cKgUP2S}Il0ox=W*IS^nU{Gvo{{AevH4|drC*z^peihG!*Sk`o>2bK#rTp4E-Edp z;3Kx8C;&b>811HzLzqc5mm6WUvZ<4b73;Jp_7#d1?D)g-LF2a_916@vU-T6a)-N`5 zKK#~Yygm5d69_oeHNn6K@iRv$o4a&3^UK$34^6ObwTgS=lV8brbH--MEWUMR?KRTf zv)AnnM8pd~BshMo1n^8sfHCi7=43aF$@UpX+Duz-jh)G*P&A&$rA{6;Ki>^#`xXpe zKk`9{9sXdpG&PwyTZPiVC;{3JKwy#q{)38_aw(ap>FZEGNz=K+KJG!(CWNyb8KT|V zVMOmv9~HRRCXNRU1fLn;4fd86m$yx=!}k>qy8`#1hRlra>dYtkVSD{E1RwSJ#ikP3 zF(<;1%7(T{0TW>?XOH|-{znaJ#Xj%e_DGC2N=L1(s%q2c731AU1}WsTwo~J>q_P+N zmldvF^iPlpFO7oUPzkILr6&P_^^OHV+^=kB8Q)xkVhTA_h{dmYR82R6kur}I*a8m< s^lMg<2U_D1c5sK?VHn{#blWQzq{5RR7J9?XKo*JB~DislECIHW7CKXk^jD zW@r3l6z$?II)hFfKW0jQLw8AE(M+dDr-NnBa8#T*Mm`+(@LC7q)M4)QT|z9H=R%-$ zktoQ>=EyAOa>;)DPnHL^Lk2zRFdj56@)s&_X=%WTNO8hnx*J;UZ6CiC%X;s4s-5y> z`tE7Mu#^a!j=>n$(c?2KN8Vu?*se3}6aP6)jE%(_DM1`^bTvGFo6pjyrOc*u1%mlx zpl7Fe5!~#QduBOBHA%oca|K2C=1I1Vj?f|Mp#5UkETVoL_A zeJdrEN&)o7mkEV6-T+hY|1UWxAPTsIGVNYlvOA4k#*w}^^7;&^^b9K7d?34bU{vQ9 zNBbF5JwxL^KY7%P3)5nD`;Qbnb8~?kAhge#+*WSOkg=EWY<@s-pU1WimActts8LI$ zc!hJ;lK@!xcZ0k3>R!3mgj#3`Pr$pXsKr`vAG(srmL4{CLa0Q0U$?fS;aOlqe#Z{$ zK6NpxN(BQIEcYiv>(|o2B>_R6_<@d>bu+1U*em957w!}SrtPuf2U6_xniL;d;CaOs2d-sf8hUP86x@@JcwE%&y@#J+OtORg@#F zVJ10Lk~wIsleS*t!7=a!dGnEtZeEN34Pj}hudTnc|H^0>kw(@!W%zOK_krHZ-X~u(v;)*YgAV0spQ|}T_O=%CO;YFM`DiXgMHaOZ)9(04M)f5rsIN%U_md#ca8u6 diff --git a/snowblocks/xdg/user-dirs.dirs b/snowblocks/xdg/user-dirs.dirs index 462fc5b..faaa87e 100644 --- a/snowblocks/xdg/user-dirs.dirs +++ b/snowblocks/xdg/user-dirs.dirs @@ -7,7 +7,7 @@ XDG_DESKTOP_DIR="$HOME/desktop" Desktop XDG_DOCUMENTS_DIR="$HOME/documents" Documents -XDG_TEMPLATES_DIR="$HOME/code/scratchpad/gists" +XDG_TEMPLATES_DIR="$HOME/code/snippetbox/gists" XDG_DOWNLOAD_DIR="$HOME/downloads" Downloads XDG_MUSIC_DIR="$HOME/music" Music XDG_PICTURES_DIR="$HOME/images" Images From fdf23e4126f74c4bbb3004e46b4535c5bb091b6c Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Tue, 28 Nov 2017 20:08:46 +0100 Subject: [PATCH 083/214] Add bookmarks for the "archbook" host GH-70 --- snowblocks/tilix/README.md | 15 ++++++++++----- .../tilix/bookmarks.json.archbook.igloocrypt | Bin 0 -> 995 bytes .../tilix/bookmarks.json.igloo.igloocrypt | Bin 850 -> 889 bytes snowblocks/tilix/{config.dconf => tilix.dconf} | 0 4 files changed, 10 insertions(+), 5 deletions(-) create mode 100644 snowblocks/tilix/bookmarks.json.archbook.igloocrypt rename snowblocks/tilix/{config.dconf => tilix.dconf} (100%) diff --git a/snowblocks/tilix/README.md b/snowblocks/tilix/README.md index 1e6588b..da6aaa0 100644 --- a/snowblocks/tilix/README.md +++ b/snowblocks/tilix/README.md @@ -1,24 +1,29 @@ * [dconf Configuration](#dconf-configuration) * [Nord Color Scheme](#nord-color-scheme) -* [References][#references] +* [References](#references) # dconf Configuration -The [dconf][dconf] dump [`config.dconf`][config-dconf-gh] provides configurations for the `com.gexperts.Tilix` Tilix schema and can be loaded via `dconf` by run +The [dconf][dconf] dump [`tilix.dconf`][config-dconf-gh] provides configurations for the `com.gexperts.Tilix` Tilix schema and can be loaded via `dconf` by run ```sh -dconf load /com/gexperts/Tilix/ < config.dconf +dconf load /com/gexperts/Tilix/ < tilix.dconf +``` + +A new dump can be exported via + +```sh +dconf dump /com/gexperts/Tilix/ > tilix.dconf ``` # Nord Color Scheme -The [Nord Tilix][nord-tilix-gh] color scheme, included in the current [`config.dconf` dconf dump](##dconf-configuration), is installed through the AUR [`nord-tilix`][nord-tilix-aur] package version `0.3.0-2`. +The [Nord Tilix][nord-tilix-gh] color scheme, included in the current [`tilix.dconf` dconf dump](##dconf-configuration), is installed through the AUR [`nord-tilix`][nord-tilix-aur] package version `0.3.0-2`. # References * [Official Tilix Website][tilix] * [Tilix GitHub Repository][tilix-gh] -* [Official *dconf* GNOME Project Website][dconf] [config-dconf-gh]: https://github.com/arcticicestudio/igloo/blob/develop/snowblocks/tilix/config.dconf [dconf]: https://wiki.gnome.org/Projects/dconf diff --git a/snowblocks/tilix/bookmarks.json.archbook.igloocrypt b/snowblocks/tilix/bookmarks.json.archbook.igloocrypt new file mode 100644 index 0000000000000000000000000000000000000000..c9b30c37c635e8a17df090614661bdea045e87fb GIT binary patch literal 995 zcmV<9104K?0t^H4xkqa?CzqW85B?#F*Jhr@c*o&OpxRQ>?v37OZH(gDbH_2v;TnpX zzy9!?J1h7$Duzp(8<9Nd3lqv|dTyuG+~aJc(@P|WkCnbZa8e4~d1b_*o1(&kHBsAX zcorS10K&dlvs!PNd~Y8{X}o~?_H=~WA=^MRr)t&i|g59CxrBIXVWYv=BUp!UBW;2fXAMQd(N|@Jv0r(&h zZWTMIzoCE=Pk)23YAPqV$uZfuJb)XNN+%`6T#Kz2ivuDxFF%hqFd1pUj~1nTI+ep4 z{2P<^2hA;AtUQgj1oq{bdkNSp=^=R@M)#+@zHc`~bfU~rfa#m!kn~&Riyx$3By&2h zXvWjgg;8qBTY;ALnTBD{A;@aASb3S9aMazoDxV2UDr05>=PFP26f=96Q%4M#)tUOw&2ANE$V{ zZ(}9A#YMyfx~zB|<4`+pEc}c;W&44kwH-k{nY*s(x!UM@7642ij+AQ<5y*G%%%I}U z$g)G18ouI4-$JaJj!2XZ6~x!HIKqH)xG8)vZMPECVwZ<+m>OHD2^%!AcYeD_@S%Zw z+IL)4cOcbSyGYs;CA7J}djCponQIJs>wp%HVgJTq!GHy{_Wgco3+vlqe+8?+Fh%@L zU7cBvpAFVcW6-_iV?=2AJnCig4Z%8f_C$cL-_MC$aRMZL)vvj2<6e|*R{;D4VQ}a~eGv8D`a^}PU1U80^$aW3 z-+ra3Z))EUTSRu3Yh?BEg84rWEg99rcB=D=d`)8&hSN%)ke5+!*q$5Ja{o#sIky;$ zUVb<)D=e%Ov^(D@0cjjH=rMq-d3)wDMK)!%K+WBxdYZ!4rZl6pj@_)r!g^^K{@e1^ Ryn^4rzbX8RA17j3WgC-x^Z5V( literal 0 HcmV?d00001 diff --git a/snowblocks/tilix/bookmarks.json.igloo.igloocrypt b/snowblocks/tilix/bookmarks.json.igloo.igloocrypt index 86f78ea0657d37f4321beca3ec3575bece88f6de..d33af098ffbe14e37b986196802046d29819fb12 100644 GIT binary patch literal 889 zcmV-<1BU#C0t^H4xkqa?CzqW85C3xcsTQ=)BrYBdMRfe7Lo6)4`s1F)`)2N1-NFrtWqBK@QvQEDuKhx_c)kn3l|tr-zrE^k-rxX8$`)4u zOfr52(fS%RY>TdtWi=`9*XhpB2~V^Fg6SuMfg;UWr~%vl0_|ubwBCG?@6?+ zt|W!aJZS*YKl2YCDB&~j@wS7V9y-R*xwK5;Q9 z6_oyhjoI$!>@k+G^ESx%GgT;Ab~ZQ<`GIZIjz-(0jV%l?08Y6$^1NgCAygb;IzAaH z#ICCl$R{#wsBvM5CdlM~zFp)m0~28IXnCOTeGMRCA&8`oi z2_`7)OzBl7-<2dE#U_NTcQLSf1N9qQ06=Dj4O(j*5Tatw=Wg2*U(tUZML#uvunfH19Df#@e}&z z+FNRDjjLDk25BmbQoWh$$K$u8o89q;rLz_^1W7$LmCZN5_516`AUl-R~# zusMZ%lj;9xQuA${;cI-_q9+}(SSFLNz1*c7bEY&f93J_IRwGtLQHM%l?zP&Lkqm%m zD85TLISp6i<%5!cXT|9jvzN{IcK5rvv_a!{SO=f!JvWXmNW*YaX{Mu=D)f;W6;Nci PAI%T8E6-)JX)a<25=2bpd#fe%(jotX$}@2m-+4?gO`~0G3CqM>v;1y zK9La;NFsUlvmo@J8Ec@6{cWxgJ}rcS<;Qod z>-(n<#TdmMJM8{b|G(0}fC15L$;NDM(sp*+(s8o}(e#G6jkzcJFiqRnpLqyFU*)+q zF3Va9kOuLnW&Fu!4Hb1I*Vc5pN6W)wOK0pDa;pf3H3x=S>@Keo+2uBvwaSq3;XGtF zCUH!gg+Fi)SZWVZ3mPF=Agt|C+$R3=K36wYywYDy=3#grcC1rp6yB;m0PK-0fCcZK z!UAUw47EDldovZ&I1L9PNhJ_z zu>vXZy6p%GkfbXZhSaZlN-=;UK;^a)-9j-9at~d1itZ$)>_|NhD8HhTt>^KQ2|%~{ zLv^bYLF)h%Qm0^EE^US=armR`82Rn@I(W24=};}6>Tb!}!yW(!sU8;Mf@terYHP3W c%tl7L(0yYr+B&HFy#S=z0W&3}g8%>k diff --git a/snowblocks/tilix/config.dconf b/snowblocks/tilix/tilix.dconf similarity index 100% rename from snowblocks/tilix/config.dconf rename to snowblocks/tilix/tilix.dconf From 44c16aea1fd5c69a765e013a964cbeb2f9cb6340 Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Wed, 29 Nov 2017 12:17:00 +0100 Subject: [PATCH 084/214] Add new "diff-so-fancy" compatible patch alias This commit adds the new "fp" (format patch) alias to fix a output problem when using "diff-so-fancy" with the the "format-patch" command which also printed the ANSI color sequences. This is prevented by using the "--no-color" option. The alias also contains the "--patch-with-stat" option to add additional patch stats like the total amount of changed/removed lines. GH-84 --- snowblocks/git/gitconfig | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/snowblocks/git/gitconfig b/snowblocks/git/gitconfig index 040cf1b..ec95d75 100755 --- a/snowblocks/git/gitconfig +++ b/snowblocks/git/gitconfig @@ -242,6 +242,16 @@ # Usage: # git fa fa = fetch --all --prune + + # +----------------------------+ + # + Interaction - Format Patch + + # +----------------------------+ + # Formats "diff-so-fancy" compatible patchs by removing printed ANSI color escape sequences and enables patch stats + # by default. + # + # Usage: + # git fp + fp = diff --patch-with-stat --no-color # +---------------------+ # + Interaction - Merge + From 9cf72071312a62cafd11ecbabb8cd3c5f6f0925b Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Wed, 29 Nov 2017 17:23:05 +0100 Subject: [PATCH 085/214] Add disabled key mappings for tmux compatibility MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The key mappings * Scroll down: Shift + Ctrl + Down * Scroll up: Shift + Ctrl + Up have been disabled for compatibility reasons with the tmux snowlbock (1). It provides key mappings to resize panes via Ctrl + Shift + 🠨 🠩 🠪 🠫 which key press events are catched by the Tilix efault terminal scroll key mappings. GH-70 --- snowblocks/tilix/README.md | 14 ++++++++++++++ snowblocks/tilix/tilix.dconf | 2 ++ 2 files changed, 16 insertions(+) diff --git a/snowblocks/tilix/README.md b/snowblocks/tilix/README.md index da6aaa0..2eccebb 100644 --- a/snowblocks/tilix/README.md +++ b/snowblocks/tilix/README.md @@ -1,5 +1,7 @@ * [dconf Configuration](#dconf-configuration) * [Nord Color Scheme](#nord-color-scheme) +* [Key Mappings](#key-mappings) + * [tmux snowblock compatibility](#tmux-snowblock-compatibility) * [References](#references) # dconf Configuration @@ -20,6 +22,17 @@ dconf dump /com/gexperts/Tilix/ > tilix.dconf The [Nord Tilix][nord-tilix-gh] color scheme, included in the current [`tilix.dconf` dconf dump](##dconf-configuration), is installed through the AUR [`nord-tilix`][nord-tilix-aur] package version `0.3.0-2`. +# Key Mappings + +## tmux snowblock compatibility + +The key mappings + +* *Scroll down* Shift + Ctrl + Down +* *Scroll up* Shift + Ctrl + Up + +have been disabled for compatibility reasons with the [tmux snowlbock][gh-sb-tmux]. It provides key mappings to resize panes via Ctrl + Shift + 🠨🠩🠪🠫 which key press events are catched by the Tilix efault terminal scroll key mappings. + # References * [Official Tilix Website][tilix] @@ -31,3 +44,4 @@ The [Nord Tilix][nord-tilix-gh] color scheme, included in the current [`tilix.dc [nord-tilix-gh]: https://github.com/arcticicestudio/nord-tilix [tilix]: https://gnunn1.github.io/tilix-web [tilix-gh]: https://github.com/gnunn1/tilix +[gh-sb-tmux]: https://github.com/arcticicestudio/igloo/tree/develop/snowblocks/tmux diff --git a/snowblocks/tilix/tilix.dconf b/snowblocks/tilix/tilix.dconf index 5f37e3d..e4a0cd4 100644 --- a/snowblocks/tilix/tilix.dconf +++ b/snowblocks/tilix/tilix.dconf @@ -30,6 +30,8 @@ quake-width-percent=66 [keybindings] session-synchronize-input='s' session-save='disabled' +terminal-scroll-down='disabled' +terminal-scroll-up='disabled' [profiles] list=['2b7c4080-0ddd-46c5-8f23-563fd3ba789d'] From cc75c2ff16c4f943efcf489f3d9845a605487851 Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Wed, 29 Nov 2017 15:11:49 +0100 Subject: [PATCH 086/214] Add new "lsm" alias for file modes/attributes This commit adds a new alias named "lsm" for the "stat" command to show file/directory mode bits (attributes) (1) in the octal notation format. References: (1) https://en.wikipedia.org/wiki/File_system_permissions GH-85 --- snowblocks/bash/core/aliases | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/snowblocks/bash/core/aliases b/snowblocks/bash/core/aliases index ff063c3..3bf95bf 100644 --- a/snowblocks/bash/core/aliases +++ b/snowblocks/bash/core/aliases @@ -68,6 +68,13 @@ alias lsraw='LC_COLLATE=C \ls -N1 --group-directories-first' # * use two tab stops. (-x2, --tabs=n) alias less='less -RFXx2' +# Show mode bits of files and directories in ocal form, +# +# %A - Access rights in human readable form +# %a - Access rights in octal +# %N - Quoted file name with dereference if symbolic link +alias lsm='stat -c "%A %a %N"' + # +-------+ # + Utils + # +-------+ From e0a01abb0f0c498e2aab102988acd379b9fd2ba2 Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Wed, 29 Nov 2017 18:29:47 +0100 Subject: [PATCH 087/214] Create new package configuration for Gradle Sets and exports global default Gradle (1) options using the "GRADLE_OPTS" (2) environment variable. It should include * "org.gradle.daemon=true" - Enable to always use the Gradle daemon to run builds. Since Gradle 3.0, daemon is enabled by default (2) and is recommended for running Gradle. * "org.gradle.console=rich" - Always colorize console output. References: (1) https://gradle.org (2) https://docs.gradle.org/current/userguide/gradle_command_line.html#sec:cli_environment_variables (3) https://docs.gradle.org/3.0/release-notes.html#improved-gradle-daemon,-now-enabled-by-default GH-86 --- snowblocks/bash/config/pkg/gradle | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 snowblocks/bash/config/pkg/gradle diff --git a/snowblocks/bash/config/pkg/gradle b/snowblocks/bash/config/pkg/gradle new file mode 100644 index 0000000..7245a02 --- /dev/null +++ b/snowblocks/bash/config/pkg/gradle @@ -0,0 +1,20 @@ +#!/usr/bin/env bash +# Copyright (c) 2016-2017 Arctic Ice Studio +# Copyright (c) 2016-2017 Sven Greb + +# Project: igloo +# Repository: https://github.com/arcticicestudio/igloo +# License: MIT +# References: +# https://docs.gradle.org/current/userguide/gradle_command_line.html +# https://docs.gradle.org/current/userguide/build_environment.html +# https://docs.gradle.org/current/userguide/console.html#sec:console_build_output + +# Set the default system-wide Gradle options. +# +# > org.gradle.daemon +# Enable to always use the Gradle daemon to run builds. +# Since Gradle 3.0, daemon is enabled by default and is recommended for running Gradle. +# > org.gradle.console +# Use "rich" level to always colorize console output. +export GRADLE_OPTS="-Dorg.gradle.daemon=true -Dorg.gradle.console=rich" From 831535fb525332ad6a26648baf4ac6870e62ed48 Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Thu, 16 Nov 2017 15:53:34 +0100 Subject: [PATCH 088/214] Create new snowblock for "tmux" GH-66 --- snowblocks/tmux/README.md | 118 +++++++++++++++++ .../assets/scrot-doc-tc-support-disabled.png | Bin 0 -> 20855 bytes .../assets/scrot-doc-tc-support-enabled.png | Bin 0 -> 37463 bytes snowblocks/tmux/snowblock.json | 10 ++ snowblocks/tmux/tmux.conf | 123 ++++++++++++++++++ 5 files changed, 251 insertions(+) create mode 100644 snowblocks/tmux/README.md create mode 100644 snowblocks/tmux/assets/scrot-doc-tc-support-disabled.png create mode 100644 snowblocks/tmux/assets/scrot-doc-tc-support-enabled.png create mode 100644 snowblocks/tmux/snowblock.json create mode 100755 snowblocks/tmux/tmux.conf diff --git a/snowblocks/tmux/README.md b/snowblocks/tmux/README.md new file mode 100644 index 0000000..e91293f --- /dev/null +++ b/snowblocks/tmux/README.md @@ -0,0 +1,118 @@ +* [Configuration](#configuration) + * [24-bit "True Color" Support](#24-bit-true-color-support) + * [Automatic tpm Installation](#automatic-tpm-installation) +* [Key Mappings](#key-mappings) +* [Development](#development) + * [Manual Plugin Loading](#manual-plugin-loading) + +# Configuration + +## 24-bit "True color" Support + +[tmux][tmux] supports 24-bit *True color* since version [2.2][tc-version]. + +To check if tmux has been compiled with *True color* support start `tmux` and run + +```sh +tmux info | grep Tc +``` + +If the output is `Tc: (flag) true` tmux supports *True color*, otherwise the output will be `Tc: [missing]`. + +The 24-bit colors can be tested by run this inside tmux: + +```awk +awk 'BEGIN{ + s="/\\/\\/\\/\\/\\"; s=s s s s s s s s; + for (colnum = 0; colnum<77; colnum++) { + r = 255-(colnum*255/76); + g = (colnum*510/76); + b = (colnum*255/76); + if (g>255) g = 510-g; + printf "\033[48;2;%d;%d;%dm", r,g,b; + printf "\033[38;2;%d;%d;%dm", 255-r,255-g,255-b; + printf "%s\033[0m", substr(s,colnum+1,1); + } + printf "\n"; + }' +``` + +If the line looks "stepwise" tmux does not use 24-bit *True color*: + +![](https://raw.githubusercontent.com/arcticicestudio/igloo/develop/snowblocks/tmux/assets/scrot-doc-tc-support-disabled.png) + +Otherwise the line should have smooth transitions: + +![](https://raw.githubusercontent.com/arcticicestudio/igloo/develop/snowblocks/tmux/assets/scrot-doc-tc-support-enabled.png) + +The `$TERM` environment variable is important for tmux as described in the official [tmux FAQ][tmux-faq]. The variable must be initialized with a terminal that supports 256 colors (`*-256color`). More information about 24-bit color terminal support can be found in the [ArchWiki][archw-24bit]. + +If the terminal supports *True color* the `terminal-overrides` option must be set in the `~/.tmux.conf` file for the `$TERM` value and the *True color* `Tc` tmux flag: + +```sh +set-option -ga terminal-overrides ",xterm-256color:Tc" +``` + +This will reflect the actual `$TERM` outside of tmux and enables full compatibility. + +For other terminals, replace `xterm-256color` with the relevant terminal type, stored in `$TERM`, **including the important `Tc` terminfo extension flag!**. + +See the *tmux(1)* man page for details about the `Tc` [terminfo][terminfo] extension. + +## Automatic tpm Installation + +If [tpm][tpm-gh] doesn't exist it can be automatically installed by adding this check from the [official tpm wiki][tpm-autoinstall] to `~/.tmux.conf`: + +```sh +if "test ! -d ~/.tmux/plugins/tpm" \ + "run 'git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm && ~/.tmux/plugins/tpm/bin/install_plugins'" +``` + +After cloning the tpm repository the [plugin installer helper script][tpm-bin-plugin-installer] will be run to install all configured plugins. + +# Key Mappings + +## Split windows + +* Horizontal: Prefix - h +* Vertical: Prefix - v + +## Switch windows + +* Switch to previous window: Prefix - Shift + 🠨 +* Switch to next window: Prefix - Shift + 🠪 + +## Resize panes + +* Resize left: Prefix - Ctrl + Shift + 🠨 +* Resize right: Prefix - Ctrl + Shift + 🠪 +* Resize up: Prefix - Ctrl + Shift + 🠩 +* Resize down: Prefix - Ctrl + Shift + 🠫 + +Please read the documentation of the [Tilix][gh-sb-tilix] snowblock about the [compatibility with the tmux key mappings][gh-sb-tilix-keymap-tmux-comp]. + +## Synchronize typing between panes + +* Toggle typing synchronization: Prefix - e + +# Development + +## Manual Plugin Loading + +Local plugins can be manually loaded without using [tpm][tpm-gh] by adding this to the `~/.tmux.conf`: + +```sh +run-shell ~/.tmux/plugins/nord-tmux/nord.tmux +``` + +[archw-24bit]: https://wiki.archlinux.org/index.php/Tmux#24-bit_color +[faq]: https://github.com/tmux/tmux/wiki/FAQ#what-is-term-and-what-does-it-do +[gh-sb-tilix]: https://github.com/arcticicestudio/igloo/tree/develop/snowblocks/tilix +[gh-sb-tilix-keymap-tmux-comp]: https://github.com/arcticicestudio/igloo/tree/develop/snowblocks/tilix#tmux-snowblock-compatibility +[ghg-truecolor]: https://gist.github.com/XVilka/8346728 +[tc-version]: https://github.com/tmux/tmux/commit/427b8204268af5548d09b830e101c59daa095df9 +[terminfo]: https://en.wikipedia.org/wiki/Terminfo +[tmux]: https://tmux.github.io +[tpm-gh]: https://github.com/tmux-plugins/tpm +[tpm-autoinstall]: https://github.com/tmux-plugins/tpm/blob/master/docs/automatic_tpm_installation.md +[tpm-bin-plugin-installer]: https://github.com/tmux-plugins/tpm/blob/master/bin/install_plugins \ No newline at end of file diff --git a/snowblocks/tmux/assets/scrot-doc-tc-support-disabled.png b/snowblocks/tmux/assets/scrot-doc-tc-support-disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..76b0fc6d6b0f0f0fef4cb80f927aa5d61ae97723 GIT binary patch literal 20855 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%0AvTJ^0NVJCkB37D~c`L7NP~whnkZ38$;()@fVu zG{9oYB1#;33)au+81nsmjpU^@C4Lj-Ln(Xm5=+%A%(0(>6*NdK(zdI7lu-c8Q$bH& zwD?$Wl|S4STto84ZJ9j>#=8_(tj6LSreSV+t{I7F&mlHrOxe>lpb>DQw2kC}0 zI)+J<__xgOV0g{X1**Azpp@;09WGl)gnf0AE589Ej;_b^fB!-V<5&#?Xm>UvUD|>n z1@_M|D`UT66>7i8YGADiDG|O8*3-MIBRldmQ?S6ac?T$%TdKd#I!W&T55QxO_}ec8 zLiPjdLFCK)H5yQsIPgucNmX@b#DrsdsDXHdhFJ*$0V8e84P4UM6(98WnN=7#H^``V zV_7Fqf@JK^WWC)tu?cUYk8LqjTeBnW#^XT984tK2Yr8^9s}VCl4!7lSTD{^ORS%9F z^i-spkwwX>vGXWY8k3~J$tO_;5VL4(V&O)9QIeev?b)+(egco_zip^DgU5U_G~m>G zSJoyuwY1kp&-0`fzFUzV8Wnk?JH9j1qK5%2qI|A}ri{Bfn(E{<7txB8A`Q69Ms> zr>ZXp|LMH$s3hRp-^y&i!FjoKBz5D0N$QzFbN-IF&|oY+qEU1q*>cGqObgo<6Vord z>}`TBt4&SmntU!aduWt@&U8m^+PC+(;}qV|amLai!Loj;JcV})lAP74ZCCHT;^n3_ zos=uWH4!7-uP5c}F9!bhn#gk1G)arQCd+}91n2I&Nl{Kv1gJY#a@2daCiCw)nqC01 zaLSpiB7(vxIWsBtC2qfFhB-K+l9(rADHAS&hWwg7FlYvVw5`6WnxjW;XOF$5$ZQPh z!+b-*A9Sw1#sNvf$XA+s0>YILlTK}01}>9{$E%iVE+B%3Vb9f!Gf8{{HmUjkWHd@V zVzUh-k>w8PSV#T-nc&Xsu8<^I(-$h2zId{xB&GD9&`sw%=cedJ&`h2%Dn5|Zj<*{` zRs-eX##(Ry5A&3d>sc6CY_U25dX@y07+yVLlZ69}cf`Rx#0T>LKP?Lxd7A}NymCLh zZ5|%%W2?>vfk&I###%lqnenPOk5DZ$BaGP}P^Rf{zm}_qnv$A;tVI!+prx%R71SZFDP$UmS%wGL^3x7#QCw`324{z}(u;MrOZ4F%#~iKnalK9>b?(*=KtNjs7}C zwiUqf(KZJAkdPb1XDXKa^7qUWCGe0I%#v{B5NZpa#eH*GxvSi9uPo=`7(f) zcZH2o1Qb);c2$Uvzx~I}Rtyvo?MO zf;QBVVisRd2VKo4rE@oU{0%C^V<};=8Pz8D-9UKg0?DHDFqPTThn{ybIILey0ex`^ z-gIx$d|~2!9mLi;h$q%(mUS#EEB}k9A^s(oEd#aAj$1*|F8as0dA1`%g147 VD+6syum45!@^trct9Ctm{of@_dpiIC literal 0 HcmV?d00001 diff --git a/snowblocks/tmux/snowblock.json b/snowblocks/tmux/snowblock.json new file mode 100644 index 0000000..913d90a --- /dev/null +++ b/snowblocks/tmux/snowblock.json @@ -0,0 +1,10 @@ +[ + { + "clean": ["~"] + }, + { + "link": { + "~/.tmux.conf": null + } + } +] diff --git a/snowblocks/tmux/tmux.conf b/snowblocks/tmux/tmux.conf new file mode 100755 index 0000000..7795f7f --- /dev/null +++ b/snowblocks/tmux/tmux.conf @@ -0,0 +1,123 @@ +# Copyright (c) 2016-2017 Arctic Ice Studio +# Copyright (c) 2016-2017 Sven Greb + +# Project: igloo +# Repository: https://github.com/arcticicestudio/igloo +# License: MIT +# References: +# https://github.com/arcticicestudio/igloo/blob/develop/snowblocks/tmux/README.md + +#+-----------+ +#+ Bootstrap + +#+-----------+ + +# If "tpm" is not already installed, automatically clone the repository and install all configured plugins. +if "test ! -d ~/.tmux/plugins/tpm" \ + "run 'git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm && ~/.tmux/plugins/tpm/bin/install_plugins'" + +#+---------+ +#+ Plugins + +#+---------+ + +#+--- UI ---+ +set -g @plugin "tmux-plugins/tmux-prefix-highlight" + +#+--- Color Themes ---+ +set -g @plugin "arcticicestudio/nord-tmux" + +#+-----------------------+ +#+ Plugin Configurations + +#+-----------------------+ + +#+--- tmux-plugins/tmux-prefix-highlight ---+ +set -g @prefix_highlight_show_copy_mode "on" + +#+---------+ +#+ Options + +#+---------+ + +# Enable 256 color support +set -g default-terminal "xterm-256color" + +# Enable 24-bit "True color" support +set-option -ga terminal-overrides ",xterm-256color:Tc" + +# Use vi(m) key bindings in copy mode and in the status line +setw -g mode-keys vi +set -g status-keys vi + +# Renumber windows on close +set -g renumber-windows on + +# Increase the maximum history length +set -g history-limit 10000 + +# Enable mouse mode +set -g mouse on + +# Automatically set window titles +set-window-option -g automatic-rename on +set-option -g set-titles on + +# Use multiple commands without sending the prefix-key within 1 second (default is 500 ms). +set -g repeat-time 1000 + +# No delay for escape key press +set -sg escape-time 0 + +#+--------------+ +#+ Key Bindings + +#+--------------+ + +# - for window splitting +unbind % +bind h split-window -v +unbind '"' +bind v split-window -h + +# - to toggle synchronization +bind e setw synchronize-panes + +# -- to resize panes +bind -r C-S-Down resize-pane -D +bind -r C-S-Up resize-pane -U +bind -r C-S-Left resize-pane -L +bind -r C-S-Right resize-pane -R + +# -- to switch panes +bind -r C-Left select-pane -L +bind -r C-Right select-pane -R +bind -r C-Up select-pane -U +bind -r C-Down select-pane -D + +# -- to switch windows +bind -r S-Left previous-window +bind -r S-Right next-window + +# Inherit current working directory for new windows/pane +bind c new-window -c "#{pane_current_path}" + +# - to enter copy-mode with vi(m) key bindings. +# In copy-mode use to start visual selection and to copy the selection. +bind Escape copy-mode +bind -T copy-mode-vi 'v' send-keys -X begin-selection +bind -T copy-mode-vi 'y' send-keys -X copy-selection +bind -T copy-mode-vi 'Space' send-keys -X halfpage-down +bind -T copy-mode-vi 'Bspace' send-keys -X halfpage-up +# Use -

to paste the copied content. +unbind p +bind p paste-buffer + +# -r to reload the configuration file +unbind r +bind r source-file ~/.tmux.conf \; display "Reloaded configuration!" + +#+------------+ +#+ Preloading + +#+------------+ + +# Import the local configuration file if it exists +if "test -f ~/.tmux.conf.local" "source '~/.tmux.conf.user'" + +# Initialize and run tpm +run "~/.tmux/plugins/tpm/tpm" From d8fd2e8f9ecd334870b72c4bc7cd78003d96986c Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Fri, 8 Dec 2017 11:24:24 +0100 Subject: [PATCH 089/214] Use host specific and encrypted user configs The "gitconfig_auth" file was linked for all hosts and is now limited to the hosts "igloo" and "archbook". Also the "gitconfig_auth_job" was ignored before and has no been added in encrypted ".igloocrypt" format to the snowblock. GH-93 --- .gitignore | 3 --- snowblocks/git/gitconfig_auth_job.igloocrypt | Bin 0 -> 690 bytes snowblocks/git/snowblock.json | 21 ++++++++++++++++--- 3 files changed, 18 insertions(+), 6 deletions(-) create mode 100644 snowblocks/git/gitconfig_auth_job.igloocrypt diff --git a/.gitignore b/.gitignore index 5be00d4..a024ac3 100644 --- a/.gitignore +++ b/.gitignore @@ -5,8 +5,5 @@ snowblocks/bash/**/*.local snowblocks/bash/.log -# +--- git ---+ -snowblocks/git/gitconfig_auth_job - # +--- xdg ---+ snowblocks/xdg/applications/mimeinfo.cache diff --git a/snowblocks/git/gitconfig_auth_job.igloocrypt b/snowblocks/git/gitconfig_auth_job.igloocrypt new file mode 100644 index 0000000000000000000000000000000000000000..17d731e3d3378c27770fc0becc0fd9ae3b673146 GIT binary patch literal 690 zcmV;j0!{se0t^H4xkqa?CzqW85B@wp+t_+%#8vY4K!TfelCHM?fc5W;@WR!YV;^m_ z_edc%o9cCH*M6+=a{q|<$v*5eKkDZe26NMNqI2QE!t((vQh>T^B*}h_KEni6I~dOE z0${LLW++bIq2xg!Zajd}8QQEzj~2*4NR}w`e85@TsIVg&W~Dt{VN8ULQ@F=y=B5s}c><*}&8`xY>~aYHRbVFB33fJ=+Qu&2|Nx5)Ysb!bTM?s=->0bztPRUcI+mwTVtbEfPr|Ec=O9#u^q7+}+m(`zUDcHN10{+WO3q=ZLCGXtzv*$1pf z;#_1<`7=NvDrlbBO$vgN5bXTGGRxJz9?U?i#0}1rXUF45OO%2RZi1U2CBUY#ML%ta zb1b+ACtGaA5dk-A`CIP{{b^5aG1~PHHVFW9xc&_-K;PjF7K(H&KmsR1`fkWbq)1=HD~@M2bmo6u%k{ZW{s_mmG(<-YtC5GwG!{xfYorW^ z7YCI9_r$(6kqQX)t2X;fqkaC%pK>m}Dyqo>BcO3Moz-HP1Qn*TtLOn_x{~ok;AbbP YYhRZ<`QU~G?Q}^x*p=+dpG||t3yK_2XaE2J literal 0 HcmV?d00001 diff --git a/snowblocks/git/snowblock.json b/snowblocks/git/snowblock.json index 22bf2fa..424439a 100644 --- a/snowblocks/git/snowblock.json +++ b/snowblocks/git/snowblock.json @@ -4,12 +4,27 @@ }, { "link": { - "~/.gitattributes": null, + "~/.gitattributes": { + "hosts": { + "archbook": "gitattributes", + "igloo": "gitattributes" + } + }, "~/.git-commit-msg": null, "~/.git-diff-igloocrypt": null, "~/.gitconfig": null, - "~/.gitconfig_auth": null, - "~/.gitconfig_auth_job": null, + "~/.gitconfig_auth": { + "hosts": { + "archbook": "gitconfig_auth", + "igloo": "gitconfig_auth" + } + }, + "~/.gitconfig_auth_job": { + "hosts": { + "archbook": "gitconfig_auth_job.igloocrypt", + "igloo": "gitconfig_auth_job.igloocrypt" + } + }, "~/.gitignore": null } } From 45e2cc8b68d66a18ea1e071d0d0f5d8d8d51ea9b Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Fri, 8 Dec 2017 14:03:08 +0100 Subject: [PATCH 090/214] Add new snowblock for "npm" Created a new snowblock for NPM (1) including the ".npmrc" configuration file (2) to define * the "npm init" (3) options * init-author-name * init-author-email * init-author-url * init-version * init-license * the "package-lock" option with "false" to disable the generation of the "package-lock.json" (4) file * the "save-exact" option to always save the exact dependency versions in the "package.json" (5) References: (1) https://www.npmjs.com (2) https://docs.npmjs.com/files/npmrc (3) https://docs.npmjs.com/misc/config (4) https://docs.npmjs.com/files/package-lock.json (5) https://docs.npmjs.com/files/package.json GH-95 --- snowblocks/npm/npmrc | 14 ++++++++++++++ snowblocks/npm/snowblock.json | 15 +++++++++++++++ 2 files changed, 29 insertions(+) create mode 100644 snowblocks/npm/npmrc create mode 100644 snowblocks/npm/snowblock.json diff --git a/snowblocks/npm/npmrc b/snowblocks/npm/npmrc new file mode 100644 index 0000000..79afe0a --- /dev/null +++ b/snowblocks/npm/npmrc @@ -0,0 +1,14 @@ +; Copyright (c) 2016-2017 Arctic Ice Studio +; Copyright (c) 2016-2017 Sven Greb + +; Project: igloo +; Repository: https://github.com/arcticicestudio/igloo +; License: MIT + +init-author-name=Arctic Ice Studio +init-author-email=development@arcticicestudio +init-author-url=http://arcticicestudio.com +init-version=0.0.0 +init-license=MIT +package-lock=false +save-exact=true diff --git a/snowblocks/npm/snowblock.json b/snowblocks/npm/snowblock.json new file mode 100644 index 0000000..fd558de --- /dev/null +++ b/snowblocks/npm/snowblock.json @@ -0,0 +1,15 @@ +[ + { + "clean": ["~"] + }, + { + "link": { + "~/.npmrc": { + "hosts": { + "archbook": "npmrc", + "igloo": "npmrc" + } + } + } + } +] From bcfb65accaa906425fe3ddc576e746cfefd4aa63 Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Thu, 28 Dec 2017 08:34:47 +0100 Subject: [PATCH 091/214] Add conditional config includes for gitlab and incubator directories Uses the main Git configuration file. References: * https://github.com/blog/2360-git-2-13-has-been-released#conditional-configuration GH-97 --- snowblocks/git/gitconfig | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/snowblocks/git/gitconfig b/snowblocks/git/gitconfig index 419c9d7..35874a9 100755 --- a/snowblocks/git/gitconfig +++ b/snowblocks/git/gitconfig @@ -22,14 +22,15 @@ [includeIf "gitdir:~/code/github/"] path = ~/.gitconfig_auth +[includeIf "gitdir:~/code/gitlab/"] + path = ~/.gitconfig_auth + +[includeIf "gitdir:~/code/incubator/"] + path = ~/.gitconfig_auth + [includeIf "gitdir:~/.igloo/"] path = ~/.gitconfig_auth - # Includes sensible job authentication data: - # - user.name - # - user.email - # - user.signingkey - # - user.useconfigonly true [includeIf "gitdir:~/code/job/"] path = ~/.gitconfig_auth_job From 96e70d28dfcc7fc2f5a6ab8c35591f959d068bd1 Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Thu, 28 Dec 2017 08:46:37 +0100 Subject: [PATCH 092/214] Remove custom ATOM_HOME path The "ATOM_HOME" environment variable (1) was assigned to a custom path for the configuration folder of Atom instead of using the default "~/.atom". The reason was that the folder was located in a kind of "global application configuration collection folder" on another drive mounted on system start. This has now been deprecated and changed to use the default paths of the installed applications. The "~/.atom" folder is now used for Atom which is located on the main SSD drive instead of using a symlink to the external drive. The change is enormous performance boost as the read/write capacity of the external drive HDD was of course way slower than the SSD. References: (1) http://flight-manual.atom.io/using-atom/sections/basic-customization/#custom-home-location-with-an-environment-variable GH-98 --- snowblocks/bash/config/env/igloo | 1 - 1 file changed, 1 deletion(-) diff --git a/snowblocks/bash/config/env/igloo b/snowblocks/bash/config/env/igloo index 87e5792..feb8a05 100644 --- a/snowblocks/bash/config/env/igloo +++ b/snowblocks/bash/config/env/igloo @@ -16,7 +16,6 @@ export STORE_PKGS=$HOME/store/pool/packages export STORE_RUN=$HOME/store/run export BITFROEST_HOME=$HOME/store/bitfroest -export ATOM_HOME=$STORE_RUN/atom export AUDACITY_PATH=$STORE_RUN/audacity export FZ_DATADIR=$STORE_RUN/filezilla export GIMP2_DIRECTORY=$STORE_RUN/gimp From 2d7876e0e9bbc30fdb2f022046d6ffa78e94a3d1 Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Thu, 28 Dec 2017 08:52:08 +0100 Subject: [PATCH 093/214] Source local "~/.bin" for binaries If a local "~/.bin" folder exists it will now be added to the "$PATH" to make all included binaries (executable scripts) available. GH-99 --- snowblocks/bash/config/env/igloo | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/snowblocks/bash/config/env/igloo b/snowblocks/bash/config/env/igloo index feb8a05..47b6f77 100644 --- a/snowblocks/bash/config/env/igloo +++ b/snowblocks/bash/config/env/igloo @@ -33,4 +33,5 @@ fi PATH_INTELLIJ_IDEA_U_HOME=/opt/intellij-idea-u/bin PATH_GIT_DIFF_HIGHLIGHT=/usr/share/git/diff-highlight -export PATH="${PATH}:$JAVA_HOME/bin:$PATH_INTELLIJ_IDEA_U_HOME:$PATH_GIT_DIFF_HIGHLIGHT" +PATH_BIN=~/.bin +export PATH="${PATH}:$JAVA_HOME/bin:$PATH_INTELLIJ_IDEA_U_HOME:$PATH_GIT_DIFF_HIGHLIGHT:$PATH_BIN" From cdb3492cef18c592b47ca72e4542e463c0b2c1c1 Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Thu, 28 Dec 2017 09:12:44 +0100 Subject: [PATCH 094/214] Add shortcut alias for "trash-cli" Added a shortcut alias for "trash-cli" (1) to quickly move files and folders into the trash. References: (1) https://github.com/andreafrancia/trash-cli GH-100 --- snowblocks/bash/core/aliases | 3 +++ 1 file changed, 3 insertions(+) diff --git a/snowblocks/bash/core/aliases b/snowblocks/bash/core/aliases index 3bf95bf..d0a3eec 100644 --- a/snowblocks/bash/core/aliases +++ b/snowblocks/bash/core/aliases @@ -80,3 +80,6 @@ alias lsm='stat -c "%A %a %N"' # +-------+ # Alert via notify for long running commands. alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"' + +# Shortcut for "trash-cli" to move a file into the trash. +alias t='trash' From 7125312ee403954529fa34356b287001a0db490f Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Sat, 17 Feb 2018 16:40:05 +0100 Subject: [PATCH 095/214] Remove GNOME Nautilus .desktop file The custom "org.gnome.Nautilus.desktop" file isn't necessary anymore since the the missing MIME type handler has been added in the upstream which is necessary to open Nautilus from within other applications to e.g. show a project folder in the file system (Atom). Closes GH-105 --- .../xdg/applications/org.gnome.Nautilus.desktop | 14 -------------- 1 file changed, 14 deletions(-) delete mode 100644 snowblocks/xdg/applications/org.gnome.Nautilus.desktop diff --git a/snowblocks/xdg/applications/org.gnome.Nautilus.desktop b/snowblocks/xdg/applications/org.gnome.Nautilus.desktop deleted file mode 100644 index 5c848de..0000000 --- a/snowblocks/xdg/applications/org.gnome.Nautilus.desktop +++ /dev/null @@ -1,14 +0,0 @@ -[Desktop Entry] -Type=Application -Name=Nautilus -Icon=org.gnome.Nautilus -Exec=nautilus --new-window %U -DBusActivatable=true -Actions=new-window; -StartupNotify=true -MimeType=inode/directory;application/x-gnome-saved-search; -X-GNOME-UsesNotifications=true - -[Desktop Action new-window] -Name=New Window -Exec=nautilus --new-window From 392e927dc8e35f47b9133052dee275669acbb163 Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Tue, 20 Feb 2018 20:45:05 +0100 Subject: [PATCH 096/214] Add new snowblock for Atom Created a new snowblock for Atom (1) including * the main CSON based condifuration file (2) * the keymapping configuration file (3) > Package Support * package-sync The "package-sync" (4) package should be supported with a "packages.cson" file including all installed packages. * project-folder The "project-folder.cson" configuration file for the project-folder (5) package contains all necessary group entries. References: (1) https://atom.io (2) https://flight-manual.atom.io/using-atom/sections/basic-customization/#configuring-with-cson (3) http://flight-manual.atom.io/behind-atom/sections/keymaps-in-depth (4) https://github.com/t9md/atom-project-folder (5) https://github.com/lee-dohm/package-sync Closes GH-106 --- snowblocks/atom/config.cson | 164 ++++++++++++++++++ snowblocks/atom/keymap.cson | 19 ++ snowblocks/atom/packages.cson | 45 +++++ snowblocks/atom/project-folder.cson | 114 ++++++++++++ snowblocks/atom/snowblock.json | 24 +++ .../tilix/bookmarks.json.archbook.igloocrypt | Bin 995 -> 966 bytes .../tilix/bookmarks.json.igloo.igloocrypt | Bin 889 -> 876 bytes .../xdg/gtk-3.0/bookmarks.archbook.igloocrypt | Bin 764 -> 734 bytes .../xdg/gtk-3.0/bookmarks.igloo.igloocrypt | Bin 762 -> 742 bytes snowblocks/xdg/snowblock.json | 5 - 10 files changed, 366 insertions(+), 5 deletions(-) create mode 100644 snowblocks/atom/config.cson create mode 100644 snowblocks/atom/keymap.cson create mode 100644 snowblocks/atom/packages.cson create mode 100644 snowblocks/atom/project-folder.cson create mode 100644 snowblocks/atom/snowblock.json diff --git a/snowblocks/atom/config.cson b/snowblocks/atom/config.cson new file mode 100644 index 0000000..a205dfb --- /dev/null +++ b/snowblocks/atom/config.cson @@ -0,0 +1,164 @@ +# Copyright (c) 2017-present Arctic Ice Studio +# Copyright (c) 2017-present Sven Greb + +# Project: igloo +# Repository: https://github.com/arcticicestudio/igloo +# License: MIT +# References: +# https://flight-manual.atom.io/using-atom/sections/basic-customization/#configuring-with-cson + +"*": + "atom-beautify": + general: + analytics: false + beautifyEntireFileOnSave: false + "atom-ide-ui": + hyperclick: + linuxTriggerKeys: "shiftKey,ctrlKey" + "atom-material-ui": + colors: + abaseColor: "#88c0d0" + accentColor: "#81a1c1" + predefinedColor: "Cyan" + fonts: + fontSize: 18 + tabs: + compactTabs: true + noTabMinWidth: true + stretchedTabs: true + treeView: + compactList: true + ui: + panelContrast: true + panelShadows: true + "color-picker": + abbreviateValues: true + preferredFormat: "HEX" + uppercaseColorValues: true + "command-palette": + preserveLastSearch: true + core: + allowPendingPaneItems: false + audioBeep: false + autoHideMenuBar: true + automaticallyUpdate: false + closeEmptyWindows: false + disabledPackages: [ + "exception-reporting" + "metrics" + "markdown-preview" + "symbols-view" + "github" + ] + openEmptyEditorOnStart: false + telemetryConsent: "no" + themes: [ + "nord-atom-ui" + "nord-atom-syntax" + ] + useProxySettingsWhenCallingApm: false + docblockr: + c_style_block_comments: true + spacer_between_sections: "after_description" + editor: + fontFamily: "Source Code Pro Medium" + fontSize: 22 + preferredLineLength: 120 + scrollPastEnd: true + showInvisibles: true + softWrap: true + softWrapAtPreferredLineLength: true + tabType: "soft" + zoomFontWhenCtrlScrolling: false + "fuzzy-finder": + ignoredNames: [ + "node_modules" + ] + prefillFromSelection: true + preserveLastSearch: true + "git-diff": + showIconsInEditorGutter: true + hyperclick: + linuxTriggerKeys: "shiftKey" + win32TriggerKeys: "shiftKey" + "linter-less": + ieCompatibilityChecks: false + "linter-markdown": + presetConsistentWithoutConfig: false + presetRecommendedWithoutConfig: false + "markdown-preview-enhanced": + closePreviewAutomatically: false + enableExtendedTableSyntax: true + enableScriptExecution: false + imageDropAction: "do nothing" + openPreviewPaneAutomatically: false + minimap: + plugins: + "git-diff": true + "git-diffDecorationsZIndex": 0 + "highlight-selected": true + "highlight-selectedDecorationsZIndex": 0 + pigments: true + pigmentsDecorationsZIndex: 0 + scrollAnimation: true + "nord-atom-syntax": + accessibility: + commentContrast: 8 + "nord-atom-ui": + darkerFormFocusEffect: true + "package-sync": + createOnChange: true + forceOverwrite: true + pigments: + notifyReloads: false + "prettier-atom": + formatOnSaveOptions: + isDisabledIfNoConfigFile: true + isDisabledIfNotInPackageJson: true + prettierOptions: + printWidth: 120 + tabWidth: 2 + useEditorConfig: false + useEslint: true + useStylelint: true + "project-folder": + gitProjectDirectories: [ + "~/code/incubator" + "~/code/job" + "~/yggdrasil" + ] + gitProjectSearchMaxDepth: 2 + projectRootDirectories: [ + "~/code/bitfroest" + "~/code/lab" + ] + showGroupOnRemoveListCondition: "some-member-was-loaded" + "spell-check": + addKnownWords: true + knownWords: [ + "arcticicestudio" + "arctic ice studio" + "facebook" + "github" + "greb" + "lifecycle" + "mdn" + "mozilla" + "reddit" + "stackoverflow" + "sven" + "svengreb" + "sven greb" + "twitter" + "youtube" + ] + locales: [ + "en-US" + "de-DE" + ] + tabs: + enableVcsColoring: true + welcome: + showOnStartup: false + whitespace: + removeTrailingWhitespace: false diff --git a/snowblocks/atom/keymap.cson b/snowblocks/atom/keymap.cson new file mode 100644 index 0000000..feebc55 --- /dev/null +++ b/snowblocks/atom/keymap.cson @@ -0,0 +1,19 @@ +# Copyright (c) 2017-present Arctic Ice Studio +# Copyright (c) 2017-present Sven Greb + +# Project: igloo +# Repository: https://github.com/arcticicestudio/igloo +# License: MIT +# References: +# http://flight-manual.atom.io/behind-atom/sections/keymaps-in-depth + +"body": + # Prevent unintended closing of Atom. + "ctrl-q": "unset!" + "ctrl-shift-W": "unset!" + + # Simple and fast project management workflow. + "ctrl-alt-p": "project-folder:add" + +"atom-text-editor": + "ctrl-alt-c": "color-picker:open" diff --git a/snowblocks/atom/packages.cson b/snowblocks/atom/packages.cson new file mode 100644 index 0000000..572e8cd --- /dev/null +++ b/snowblocks/atom/packages.cson @@ -0,0 +1,45 @@ +# Copyright (c) 2017-present Arctic Ice Studio +# Copyright (c) 2017-present Sven Greb + +# Project: igloo +# Repository: https://github.com/arcticicestudio/igloo +# License: MIT +# References: +# https://github.com/lee-dohm/package-sync + +packages: [ + "atom-beautify" + "atom-material-ui" + "busy-signal" + "color-picker" + "docblockr" + "file-icons" + "highlight-selected" + "intentions" + "language-babel" + "language-diff" + "language-docker" + "language-generic-config" + "language-groovy" + "language-systemd" + "language-viml" + "linter" + "linter-eslint" + "linter-js-yaml" + "linter-jsonlint" + "linter-less" + "linter-markdown" + "linter-stylelint" + "linter-ui-default" + "markdown-preview-enhanced" + "minimap" + "minimap-git-diff" + "minimap-highlight-selected" + "minimap-pigments" + "nord-atom-syntax" + "nord-atom-ui" + "package-sync" + "pigments" + "prettier-atom" + "project-folder" +] diff --git a/snowblocks/atom/project-folder.cson b/snowblocks/atom/project-folder.cson new file mode 100644 index 0000000..79a6f7a --- /dev/null +++ b/snowblocks/atom/project-folder.cson @@ -0,0 +1,114 @@ +# Copyright (c) 2017-present Arctic Ice Studio +# Copyright (c) 2017-present Sven Greb + +# Project: igloo +# Repository: https://github.com/arcticicestudio/igloo +# License: MIT +# References: +# https://github.com/t9md/atom-project-folder#config + +groups: + "AUR": [ + "~/yggdrasil/aur/mqttfx-bin" + "~/yggdrasil/aur/nord-emacs" + "~/yggdrasil/aur/nord-gedit" + "~/yggdrasil/aur/nord-konsole" + "~/yggdrasil/aur/nord-tilix" + "~/yggdrasil/aur/nord-vim" + "~/yggdrasil/aur/nord-vim-airline" + "~/yggdrasil/aur/nord-vim-lightline" + "~/yggdrasil/aur/nord-xfce-terminal" + ] + "IceCore": [ + "~/yggdrasil/icecore/icecore-hashids" + "~/yggdrasil/icecore/icecore-json" + "~/yggdrasil/icecore/icecore-strman" + ] + "Lumio": [ + "~/yggdrasil/lumio/lumio" + "~/yggdrasil/lumio/lumio-java" + ] + "music-playlists": [ + "~/music/playlists" + ] + "Nord": [ + "~/yggdrasil/nord/nord" + "~/yggdrasil/nord/nord-alacritty" + "~/yggdrasil/nord/nord-atom-syntax" + "~/yggdrasil/nord/nord-atom-ui" + "~/yggdrasil/nord/nord-brackets" + "~/yggdrasil/nord/nord-coda" + "~/yggdrasil/nord/nord-conemu" + "~/yggdrasil/nord/nord-dircolors" + "~/yggdrasil/nord/nord-eclipse-syntax" + "~/yggdrasil/nord/nord-emacs" + "~/yggdrasil/nord/nord-gedit" + "~/yggdrasil/nord/nord-gnome-terminal" + "~/yggdrasil/nord/nord-guake" + "~/yggdrasil/nord/nord-highlightjs" + "~/yggdrasil/nord/nord-hyper" + "~/yggdrasil/nord/nord-iterm2" + "~/yggdrasil/nord/nord-java" + "~/yggdrasil/nord/nord-jetbrains-editor" + "~/yggdrasil/nord/nord-konsole" + "~/yggdrasil/nord/nord-mintty" + "~/yggdrasil/nord/nord-notepadplusplus" + "~/yggdrasil/nord/nord-putty" + "~/yggdrasil/nord/nord-slack" + "~/yggdrasil/nord/nord-sublime-text" + "~/yggdrasil/nord/nord-terminal-app" + "~/yggdrasil/nord/nord-terminator" + "~/yggdrasil/nord/nord-termite" + "~/yggdrasil/nord/nord-tilix" + "~/yggdrasil/nord/nord-tmux" + "~/yggdrasil/nord/nord-vim" + "~/yggdrasil/nord/nord-visual-studio-code" + "~/yggdrasil/nord/nord-xcode" + "~/yggdrasil/nord/nord-xfce-terminal" + "~/yggdrasil/nord/nord-xresources" + ] + "Northem": [ + "~/yggdrasil/northem/northem/northem" + "~/yggdrasil/northem/northem/northem-atom-syntax" + "~/yggdrasil/northem/northem/northem-atom-ui" + "~/yggdrasil/northem/northem/northem-dark" + "~/yggdrasil/northem/northem/northem-dark-atom-syntax" + "~/yggdrasil/northem/northem/northem-dark-atom-ui" + "~/yggdrasil/northem/northem/northem-dark-eclipse-syntax" + "~/yggdrasil/northem/northem/northem-dark-gedit-syntax" + "~/yggdrasil/northem/northem/northem-dark-intellij-idea-syntax" + "~/yggdrasil/northem/northem/northem-dark-java" + "~/yggdrasil/northem/northem/northem-dark-notepadplusplus-syntax" + "~/yggdrasil/northem/northem/northem-eclipse-syntax" + "~/yggdrasil/northem/northem/northem-gedit-syntax" + "~/yggdrasil/northem/northem/northem-intellij-idea-syntax" + "~/yggdrasil/northem/northem/northem-java" + "~/yggdrasil/northem/northem/northem-light" + "~/yggdrasil/northem/northem/northem-light-atom-syntax" + "~/yggdrasil/northem/northem/northem-light-atom-ui" + "~/yggdrasil/northem/northem/northem-light-eclipse-syntax" + "~/yggdrasil/northem/northem/northem-light-gedit-syntax" + "~/yggdrasil/northem/northem/northem-light-intellij-idea-syntax" + "~/yggdrasil/northem/northem/northem-light-java" + "~/yggdrasil/northem/northem/northem-light-notepadplusplus-syntax" + "~/yggdrasil/northem/northem/northem-notepadplusplus-syntax" + ] + "scratchpad": [ + "~/documents/scratchpad" + ] + "snippetbox": [ + "~/code/snippetbox" + ] + "styleguide": [ + "~/yggdrasil/styleguide/eslint-config-arcticicestudio" + "~/yggdrasil/styleguide/eslint-config-arcticicestudio-base" + "~/yggdrasil/styleguide/remark-preset-lint-arcticicestudio" + "~/yggdrasil/styleguide/styleguide" + "~/yggdrasil/styleguide/styleguide-git" + "~/yggdrasil/styleguide/styleguide-java" + "~/yggdrasil/styleguide/styleguide-javascript" + "~/yggdrasil/styleguide/styleguide-markdown" + ] + "videos-playlists": [ + "~/videos/playlists" + ] diff --git a/snowblocks/atom/snowblock.json b/snowblocks/atom/snowblock.json new file mode 100644 index 0000000..855c8b0 --- /dev/null +++ b/snowblocks/atom/snowblock.json @@ -0,0 +1,24 @@ +[ + { + "clean": [ + "~/.atom" + ] + }, + { + "link": { + "~/.atom/config.cson": { + "create": true, + "force": true + }, + "~/.atom/keymap.cson": { + "force": true + }, + "~/.atom/project-folder.cson": { + "force": true + }, + "~/.atom/packages.cson": { + "force": true + } + } + } +] diff --git a/snowblocks/tilix/bookmarks.json.archbook.igloocrypt b/snowblocks/tilix/bookmarks.json.archbook.igloocrypt index c9b30c37c635e8a17df090614661bdea045e87fb..4c1b1fcae772b604811505ec59bc6d2293f5aef0 100644 GIT binary patch literal 966 zcmV;%13CPK0t^H4xkqa?CzqW85C2@lcas@;pG(+2ElCeoGq;DQh9nltWZ)X@(RRdA zBIEMnaHwS5ZU+mzmGFrbTK8GMf9uYSlx5E{%tpYD0{_}H#K6NP84`lTR{oax<=0hB zq3ZI*%tZ{k`)rgv?6>G5>l!+=5-YWe^Oqn?FDLKj3w!sh@M9XxYV1d1uh!)c)zqO= zpPyDppGlO)ON~IP^Dn@!E8js04kruzy>Ur3ouZS!6U!T0%1@H#&2k>|9H_uOr(XQ( zv*PyBCm~FdB9k^QTqBr6^N@3l%iD9hO!SKmDz8;uOSQeE_Uyw!W+!?zhIJJ(^`qgo zycEXn^9G<;Q7SiB@ftX*it!EN4J^rf?Pb33U?7u#`xwOJiz{ zWInsA-<%W`$x}Q06VPs5^7R}|1O4SO?dA>Fz+%9@K2Fc~8IWk0Z3CQ3-j6AHKRI-^ zJ6xccueh=mJ5jrRN>m1v<345tJs37|0bAsKp9?Tyyp9^u>4jc^iq9`g=Es|%`@1sHN(zGm?c2qdYmK9@GDMyKWCOZ)BNvG omew?fb|m%@7Up_`-d_p(IrsX86`reNn0h!7jNiY4S8V03OxsA|M*si- literal 995 zcmV<9104K?0t^H4xkqa?CzqW85B?#F*Jhr@c*o&OpxRQ>?v37OZH(gDbH_2v;TnpX zzy9!?J1h7$Duzp(8<9Nd3lqv|dTyuG+~aJc(@P|WkCnbZa8e4~d1b_*o1(&kHBsAX zcorS10K&dlvs!PNd~Y8{X}o~?_H=~WA=^MRr)t&i|g59CxrBIXVWYv=BUp!UBW;2fXAMQd(N|@Jv0r(&h zZWTMIzoCE=Pk)23YAPqV$uZfuJb)XNN+%`6T#Kz2ivuDxFF%hqFd1pUj~1nTI+ep4 z{2P<^2hA;AtUQgj1oq{bdkNSp=^=R@M)#+@zHc`~bfU~rfa#m!kn~&Riyx$3By&2h zXvWjgg;8qBTY;ALnTBD{A;@aASb3S9aMazoDxV2UDr05>=PFP26f=96Q%4M#)tUOw&2ANE$V{ zZ(}9A#YMyfx~zB|<4`+pEc}c;W&44kwH-k{nY*s(x!UM@7642ij+AQ<5y*G%%%I}U z$g)G18ouI4-$JaJj!2XZ6~x!HIKqH)xG8)vZMPECVwZ<+m>OHD2^%!AcYeD_@S%Zw z+IL)4cOcbSyGYs;CA7J}djCponQIJs>wp%HVgJTq!GHy{_Wgco3+vlqe+8?+Fh%@L zU7cBvpAFVcW6-_iV?=2AJnCig4Z%8f_C$cL-_MC$aRMZL)vvj2<6e|*R{;D4VQ}a~eGv8D`a^}PU1U80^$aW3 z-+ra3Z))EUTSRu3Yh?BEg84rWEg99rcB=D=d`)8&hSN%)ke5+!*q$5Ja{o#sIky;$ zUVb<)D=e%Ov^(D@0cjjH=rMq-d3)wDMK)!%K+WBxdYZ!4rZl6pj@_)r!g^^K{@e1^ Ryn^4rzbX8RA17j3WgC-x^Z5V( diff --git a/snowblocks/tilix/bookmarks.json.igloo.igloocrypt b/snowblocks/tilix/bookmarks.json.igloo.igloocrypt index d33af098ffbe14e37b986196802046d29819fb12..ba0530e05d6bf45f6b2bebb9683210a6f5b3799c 100644 GIT binary patch literal 876 zcmV-y1C#uP0t^H4xkqa?CzqW85C3)0BMZS_+{<9prU#2p@3?}jPsN=#yjM_$%o1{; zH#<6l#D?R--*8AwX zLPs%pa}4Q@`()@>%UOxiI-OnQENHqsLfPir^*W@|rwso$e7~eCYB|MSSSh&^6pnTZ zgq8!2D-EAS!%4|Pxit=;>OPpe!(mHsE}Y*s zRsf+nqgL@*G*|3J*DquO$?yKhTHoM@ITfISV$3h0lqh^tz@^(HqLrQAdd|<(o+9Z5 zf)QReOwakb&9xa}w$EjelgrW6l;eXfn=fd@MGm!OtN@@tZYP$>hGDG+t8af-wOMi2 z@^8tL7a5L4(5jTJcSR~L7|x-qSzqQSc7=vIG<5T{EaW@MmY+V z&a2qVsHxJeuo$u>bmG#$ngIvzQu@5ld;DERf+Y(ulCP=g7<*e;i%l5G z%=rEBj_7Ku6+ECDcmZdQJ9=uG%jv5vqvn4=uE%4T2q{czLgY=k48|+2wBz zr{OHu6v8NNGN{IIe8?V|X?HN0?x^r=)#Yi&w9vHG_LDt(t|R2*rz@0izp)ZXkp$D CgTGP$ literal 889 zcmV-<1BU#C0t^H4xkqa?CzqW85C3xcsTQ=)BrYBdMRfe7Lo6)4`s1F)`)2N1-NFrtWqBK@QvQEDuKhx_c)kn3l|tr-zrE^k-rxX8$`)4u zOfr52(fS%RY>TdtWi=`9*XhpB2~V^Fg6SuMfg;UWr~%vl0_|ubwBCG?@6?+ zt|W!aJZS*YKl2YCDB&~j@wS7V9y-R*xwK5;Q9 z6_oyhjoI$!>@k+G^ESx%GgT;Ab~ZQ<`GIZIjz-(0jV%l?08Y6$^1NgCAygb;IzAaH z#ICCl$R{#wsBvM5CdlM~zFp)m0~28IXnCOTeGMRCA&8`oi z2_`7)OzBl7-<2dE#U_NTcQLSf1N9qQ06=Dj4O(j*5Tatw=Wg2*U(tUZML#uvunfH19Df#@e}&z z+FNRDjjLDk25BmbQoWh$$K$u8o89q;rLz_^1W7$LmCZN5_516`AUl-R~# zusMZ%lj;9xQuA${;cI-_q9+}(SSFLNz1*c7bEY&f93J_IRwGtLQHM%l?zP&Lkqm%m zD85TLISp6i<%5!cXT|9jvzN{IcK5rvv_a!{SO=f!JvWXmNW*YaX{Mu=D)f;W6;Nci PAI%T8E6-)JX)a<25e5#PD~qgu^kR^@ z%Ph%OvU75(mJYDr1*`BcA_*p$gg?GymiGtqWC2!OEiK$|GmmQPtz&J z1^u&&mQAy&#ldHLN++dV>rYSEca927U=&}DP>?fbQ6SrrO}aS;hu86RG`a@1AO(1G zSQK+{%ww60hec-5FvTLWJ|Y!llvGmA(Q~T@TBGNbI{B>qT*qZ~y9>!VUDRskcEUl^ zv5g)#1l`jcrl(-QX5oqnfWQA7701Bec?;CN4cIph*zJB=J#bcM2sU=l=ith0|Flq1 zjd)ogk}QW1iE(!KX?0;|GfkI(2%cSx@RStbigW8LNMKL5v`cR1qq#yD5%#PD+QN<^ zEYsd*0cO*!7USUtnf(i4;I^wY`(3y!sDs6hVv`deB|)6welQM9g7}Ivq8IoHVTcH! z2pajoMVxi_zA>2>KH;O*!0JL%PCp=!*^O!D^_nRx_dY6fg{z#DT|$R;V9E42JE*;C zOKP8p?D)`Hq9*D1+OrqzvA7q#WcXxsj*mr0mO(V##L9N~No*en+enP%6k>JH)c>Mf zP;G^iV`l7x%6(;NrK!@u3<1=?J=u3qJgV?eY=m&GbNu68e;a(1e8Ft*jpJ9~Ou_p3 zZY+OJ8n9PjMz!FJz8nwz!M(G5AV!h*jo;0k6KPsHz{}g(f9EnUL~3{boFySXN3N`} zZ%-CuoX!Qh6N*JFYW=Ulu?bMa>q{4Ci$$UZK@zooUQX5!L3(?f#gswb#$_W3vk!Y$ zD26$%t3(O1fs47nwD_g}EI3K(D>vd&bLhiEnMMlb`cR@?|8swvQD{G>I$^!-k#Q>) Qj zU0xNLfT1G?-o&*h*>tUHGP-@{W?a5E^!nR^~o#ikTHVBC(}ynIRYTyDVms#RNHIHxs{q>EA))2H*7+uAvN!C0a#-$f$hSddK{NO!aU~#`m1Dd8rO{Z?+3hDvvwYJ+UH7=yfx&~+ zyo%u6>1Xh#YNlk@83TR5zm+1?F7`8nztq({6`~`(@=J)n25hotc%k-ZcGr#M0Onvp ujh&LgwJWp=?mGYzedAxwBj;{aSF3zzEh-Xcs>)=0@Y}Zx`C_e4Mn|%Wv3ZmL diff --git a/snowblocks/xdg/gtk-3.0/bookmarks.igloo.igloocrypt b/snowblocks/xdg/gtk-3.0/bookmarks.igloo.igloocrypt index 994f0bf7c7188c33b51e12e3e46159247b5348c7..9cf7adc13ef4d7e1986ee0ae13b70486fa39863e 100644 GIT binary patch literal 742 zcmVObirS9nq^0vF z0s=K{f+eiEf)M+ycH`E0ULG}x4A}hZ0IT?ACJ)vBCJXP(DEZf(d$Xu9aXz#(yepTK z*)e3Xa*&?^l{#x+Nh#>`Ib*qDpk`c?uT}M`a(!n@c1tt2nP}{LnIYWfPWv z@Vr&AG+{vSardJ)+zgdL`o&D7pQi9K%Z|ttON?_9iwf#!Z=1s7f!V($aNre7tL7GD z(5h;LPq&B1v)o6SFX{#4Uv*|cr*wQ_iMch`Qk9zK{B z(U_mjM}`X=nBx(RMx9$j{G=SA)v7)Rz%hlp)B%i+dK|9jU9vL!JJW7?$$^Dfi6R3h zWo}!OJ~C1-du75T_b$*4*oge(KEB?}Bi_a|9t;BYU({Mkc`_#u!HB~@90NrG6xHPi ztYu{#N5)I1lWqd(Z<*pKMw@s+mxRd@&a~2kP61Sc)-sSLWL~+nkH+Ix>_}tRK6ajI-2#vltWD@e4Xcp7#Yc%1R70A%h3)g=*17aZhpGfd$ahcVxIY~=&?vnZ-8dEr6ky#=wH*fq~WF715dNEztF41-;TmZ39^sg!;fSlmv zTUQG~Y_?(WX_tB$#lVt#;-C9~aWi1oQwPx^W?4Dyw?k3h40mLG1tn)p+}g|n7a)U= zH25=V^_R;#WN!z~H#qTxm@Hxfq4Bxn`yJRxpNBLU?Rd`C#MDgs`ddn>lH;Lt_u4+# Yi&NzrMBK>40}@QR$;pHG$o1+&MblAhIsgCw literal 762 zcmVv;{!(jYR$Kwj6R+Luk?2HzS z94p{lb}su^TCt>ZtOREJWJ)ZVB5NF|ECQ*ks+9?v|pjr^@=UEbyHU= zV!>HHvAXy!mcdr%ZeVT@Y`kz;bnym=H`YE`3SkgeeDooixu!Io06Q%zH813_?D1P{ zoY2)ee49uF9Jx^y4dGUv+@`@n;9R3vza3en%5Hu@(cw`q4EGCW7GpBZ0r5Xr#A08Q zB>0I68-=F>YzzDg2>f)ZG_No~^axaLw?EAcP^)0bwiuxmpntVtL9eX(kY?0FxnySx zP}FXQqgsA*IC`aOYnTyOU_ELo22KQbQO>GItE<^2!dEs=*;Rv0(?^s2W8c0DC3iH) z0cKgUP2S}Il0ox=W*IS^nU{Gvo{{AevH4|drC*z^peihG!*Sk`o>2bK#rTp4E-Edp z;3Kx8C;&b>811HzLzqc5mm6WUvZ<4b73;Jp_7#d1?D)g-LF2a_916@vU-T6a)-N`5 zKK#~Yygm5d69_oeHNn6K@iRv$o4a&3^UK$34^6ObwTgS=lV8brbH--MEWUMR?KRTf zv)AnnM8pd~BshMo1n^8sfHCi7=43aF$@UpX+Duz-jh)G*P&A&$rA{6;Ki>^#`xXpe zKk`9{9sXdpG&PwyTZPiVC;{3JKwy#q{)38_aw(ap>FZEGNz=K+KJG!(CWNyb8KT|V zVMOmv9~HRRCXNRU1fLn;4fd86m$yx=!}k>qy8`#1hRlra>dYtkVSD{E1RwSJ#ikP3 zF(<;1%7(T{0TW>?XOH|-{znaJ#Xj%e_DGC2N=L1(s%q2c731AU1}WsTwo~J>q_P+N zmldvF^iPlpFO7oUPzkILr6&P_^^OHV+^=kB8Q)xkVhTA_h{dmYR82R6kur}I*a8m< s^lMg Date: Sat, 7 Apr 2018 11:48:41 +0200 Subject: [PATCH 097/214] Add new snowblock for Taskwarrior Create a new snowblock for Taskwarrior (1) including * the "key=value" based `.taskrc` configuration (2) file * a Nord (3) based color theme to be included in `.taskrc` > Content >> Context The context (4) feature should be used to separate all public projects and private/job related tasks. >> UDA (User Defined Attributes) The UDA (5) feature should be used to create custom attributes to add a assignee, a estimation value and the GitHub issue ID to a task. >> Reports The reports (6) feature should be used to extend and optimize the task output. The custom report should be set to `default.command` to replace the default `next` report. >> Aliases The config should contain aliases to align with the alias workflow of other snowblocks like bash and git. This improves the usability, because there are several commands that start with the same characters making it slower to be used with the auto completion. * `a` -> `add` * `bd` -> `burndown.daily` * `cx` -> `context` * `e` -> `edit` * `ls` -> `list` * `mod` -> `modify` > Alternative workflows The Taskwarrior workflow could be changed later on to use multiple databases per use-case like e.g. one database per project to make better use of the features like projects, tags and context with finer grained filters. > Configuration >> Core Plugins >>> `clean` * `~` * `~/.task` >>> `link` * "archbook": * `taskrc` -> `~/.taskrc` * `nord.theme` -> `~/.task/nord.theme` * "igloo": * `taskrc` -> `~/.taskrc` * `nord.theme` -> `~/.task/nord.theme` References: (3) https://arcticicestudio.github.io/nord (1) https://taskwarrior.org (2) https://taskwarrior.org/docs/introduction.html (4) https://taskwarrior.org/docs/context.html (5) https://taskwarrior.org/docs/udas.html (6) https://taskwarrior.org/docs/report.html Closes GH-107 --- snowblocks/taskwarrior/nord.theme | 100 ++++++++++++++++++++++++++ snowblocks/taskwarrior/snowblock.json | 27 +++++++ snowblocks/taskwarrior/taskrc | 82 +++++++++++++++++++++ 3 files changed, 209 insertions(+) create mode 100644 snowblocks/taskwarrior/nord.theme create mode 100644 snowblocks/taskwarrior/snowblock.json create mode 100644 snowblocks/taskwarrior/taskrc diff --git a/snowblocks/taskwarrior/nord.theme b/snowblocks/taskwarrior/nord.theme new file mode 100644 index 0000000..c90f2e6 --- /dev/null +++ b/snowblocks/taskwarrior/nord.theme @@ -0,0 +1,100 @@ +# Copyright (c) 2016-present Arctic Ice Studio +# Copyright (c) 2016-present Sven Greb + +# Project: igloo +# Repository: https://github.com/arcticicestudio/igloo +# License: MIT +# References: +# https://taskwarrior.org/docs/themes.html +# task-color(5) +# taskrc(5) + +rule.precedence.color=deleted,completed,active,keyword.,tag.,project.,overdue,scheduled,due.today,due,blocked,blocking,recurring,tagged,uda. + +#+---------+ +#+ General + +#+---------+ +color.label= +color.label.sort= +color.alternate= +color.header=bold blue +color.footnote=cyan +color.warning=bold black on yellow +color.error=bold white on red +color.debug=magenta + +#+-------------+ +#+ Task States + +#+-------------+ +color.completed=green +color.deleted=red +color.active=bold black on cyan +color.recurring= +color.scheduled=white on black +color.until=white on bright black +color.blocked=yellow on black +color.blocking=bold yellow on black + +#+----------+ +#+ Projects + +#+----------+ +color.project.none= + +#+----------+ +#+ Priority + +#+----------+ +color.uda.priority.H=bold cyan +color.uda.priority.M=bold blue +color.uda.priority.L=bold black + +#+------+ +#+ Tags + +#+------+ +color.tag.next= +color.tag.none= +color.tagged= + +#+-----+ +#+ Due + +#+-----+ +color.due=blue +color.due.today=cyan on black +color.overdue=bold red + +#+---------+ +#+ Reports + +#+---------+ +color.burndown.done=bold black on cyan +color.burndown.pending=black on bright cyan +color.burndown.started=black on blue + +color.history.add=bold black on blue +color.history.delete=bright white on bold black +color.history.done=bold black on cyan + +color.summary.background=bright white on black +color.summary.bar=black on cyan + +#+----------+ +#+ Calendar + +#+----------+ +color.calendar.due=bold black on blue +color.calendar.due.today=bold black on cyan +color.calendar.holiday=bold blue on white +color.calendar.overdue=white on red +color.calendar.today=bold black on cyan +color.calendar.weekend=bright white on bright black +color.calendar.weeknumber=bold black + +#+-----------------+ +#+ Synchronization + +#+-----------------+ +color.sync.added=green +color.sync.changed=yellow +color.sync.rejected=red + +#+------+ +#+ Undo + +#+------+ +color.undo.after=green +color.undo.before=red diff --git a/snowblocks/taskwarrior/snowblock.json b/snowblocks/taskwarrior/snowblock.json new file mode 100644 index 0000000..9e74902 --- /dev/null +++ b/snowblocks/taskwarrior/snowblock.json @@ -0,0 +1,27 @@ +[ + { + "clean": [ + "~", + "~/.task" + ] + }, + { + "link": { + "~/.taskrc": { + "force": true, + "hosts": { + "archbook": "taskrc", + "igloo": "taskrc" + } + }, + "~/.task/nord.theme": { + "create": true, + "force": true, + "hosts": { + "archbook": "nord.theme", + "igloo": "nord.theme" + } + } + } + } +] diff --git a/snowblocks/taskwarrior/taskrc b/snowblocks/taskwarrior/taskrc new file mode 100644 index 0000000..bc90009 --- /dev/null +++ b/snowblocks/taskwarrior/taskrc @@ -0,0 +1,82 @@ +# Copyright (c) 2016-present Arctic Ice Studio +# Copyright (c) 2016-present Sven Greb + +# Project: igloo +# Repository: https://github.com/arcticicestudio/igloo +# License: MIT +# References: +# https://taskwarrior.org/docs +# https://taskwarrior.org/docs/terminology.html#regex +# taskrc(5) +# task-sync(5) +# https://en.wikibooks.org/wiki/Regular_Expressions/POSIX-Extended_Regular_Expressions + +#+------+ +#+ Core + +#+------+ +data.location=~/.task + +complete.all.tags=true +default.command=list +editor=vim +list.all.projects=true +list.all.tags=true +regex=true +weekstart=Monday + +#+----+ +#+ UI + +#+----+ +include ~/.task/nord.theme +color=true + +#+---------+ +#+ Context + +#+---------+ +context.aur=project:aur +context.icecore=project:icecore +context.icepick=project:icepick +context.igloo=project:igloo +context.job=+job +context.lumio=project:lumio +context.nord=project:nord +context.northem=project:northem +context.private=+private +context.snowsaw=project:snowsaw +context.styleguide=project:styleguide + +#+-----+ +#+ UDA + +#+-----+ +uda.assignee.type=string +uda.assignee.label=Assignee +uda.assignee.values=arcticicestudio,svengreb,arcticfrostgaming, +uda.assignee.default= + +uda.estimate.type=string +uda.estimate.label=Size Estimate +uda.estimate.values=huge,large,medium,small,trivial, +uda.estimate.default= + +uda.ghi.type=numeric +uda.ghi.label=GitHub Issue +uda.ghi.default= + +#+---------+ +#+ Reports + +#+---------+ +report.stat.description=Optimized and extended status report +report.stat.columns=id,start.age,entry.age,depends.indicator,priority,project,tags,recur.indicator,scheduled,scheduled.relative,due,due.relative,until.remaining,description.count,urgency +report.stat.labels=ID,Active,Age,D,P,Project,Tags,R,Sch,,Due,,Until,Desc,Urg +report.stat.filter=status:pending +report.stat.sort=start-,due+,project+,urgency- + +#+---------+ +#+ Aliases + +#+---------+ +alias.a=add +alias.bd=burndown.daily +alias.cx=context +alias.e=edit +alias.ls=list +alias.mod=modify From 2e541f5eab5a238f633412da1ca282c69a4bc9e7 Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Sat, 7 Apr 2018 20:00:53 +0200 Subject: [PATCH 098/214] Add time tracking hooks Implemented two new hooks to track the duration a task was active. Both hooks are written in Python 3 and require a Taskwarrior version `>=2.4`. > With `totalactivetime` UDA The first hook makes use of a new UDA called `totalactivetime` of type `duration` which stores the total time in seconds. Every time a task gets stopped the value gets added to the old value. To simplify the communication with the Taskwarrior Hook v2 API (1) the hook should make use of the "taskw" (2) package which provides the bindings for Python. NOTE: This requires "taskw" (2) as a direct dependency and must be installed on the target system! The package is available from the AUR (3). > Taskwarrior integration The second hook should be a fort from the official Taskwarrior `on-modify.taskwarrior` hook (4). It comes bundled with Taskwarrior, but can not be used via symlink, because the file is owned by the `root` user which prevents the script from being executed when symlinked. The usage of the hook is also documented in the official Timewarrior docs (5). References: (1) https://taskwarrior.org/docs/hooks2.html (2) https://pypi.python.org/pypi/taskw (3) https://aur.archlinux.org/packages/python-taskw (4) https://github.com/GothenburgBitFactory/timewarrior/blob/dev/ext/on-modify.timewarrior (5) https://taskwarrior.org/docs/timewarrior/taskwarrior.html Closes GH-108 --- .../hooks/on-modify-track-timewarrior.py | 68 +++++++++ .../on-modify-track-total-active-time.py | 135 ++++++++++++++++++ snowblocks/taskwarrior/snowblock.json | 10 ++ snowblocks/taskwarrior/taskrc | 10 +- 4 files changed, 220 insertions(+), 3 deletions(-) create mode 100755 snowblocks/taskwarrior/hooks/on-modify-track-timewarrior.py create mode 100755 snowblocks/taskwarrior/hooks/on-modify-track-total-active-time.py diff --git a/snowblocks/taskwarrior/hooks/on-modify-track-timewarrior.py b/snowblocks/taskwarrior/hooks/on-modify-track-timewarrior.py new file mode 100755 index 0000000..065e421 --- /dev/null +++ b/snowblocks/taskwarrior/hooks/on-modify-track-timewarrior.py @@ -0,0 +1,68 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +# Copyright (c) 2016-present Arctic Ice Studio +# Copyright (c) 2016-present Sven Greb + +# Project: igloo +# Repository: https://github.com/arcticicestudio/igloo +# License: MIT +# References: +# https://taskwarrior.org/docs +# https://taskwarrior.org/docs/timewarrior +# timew(1) +# task(1) + +"""A Taskwarrior hook to track the time of a active task with Taskwarrior. + +This hook will extract all of the following for use as Timewarrior tags: + +* UUID +* Project +* Tags +* Description +* UDAs + +Note: + This hook requires Python 3 and is only compatible with Taskwarrior version greater or equal to 2.4! + +This hook is a fork from the `official on-modify.timewarrior hook`_. + +.. _`official on-modify.timewarrior hook`: + https://github.com/GothenburgBitFactory/timewarrior/blob/dev/ext/on-modify.timewarrior +""" + +from sys import stdin +from os import system +from json import loads, dumps + +# Make no changes to the task, simply observe. +old = loads(stdin.readline()) +new = loads(stdin.readline()) +print(dumps(new)) + +# Extract attributes for use as tags. +tags = [new["description"]] + +if "project" in new: + project = new["project"] + tags.append(project) + if "." in project: + tags.extend([tag for tag in project.split(".")]) + +if "tags" in new: + tags.extend(new["tags"]) + +combined = " ".join(["'%s'" % tag for tag in tags]).encode("utf-8").strip() + +# Task has been started. +if "start" in new and not "start" in old: + system("timew start " + combined.decode() + " :yes") + +# Task has been stopped. +elif not "start" in new and "start" in old: + system("timew stop " + combined.decode() + " :yes") + +# Any task that is active, with a non-pending status should not be tracked. +elif "start" in new and new["status"] != "pending": + system("timew stop " + combined.decode() + " :yes") diff --git a/snowblocks/taskwarrior/hooks/on-modify-track-total-active-time.py b/snowblocks/taskwarrior/hooks/on-modify-track-total-active-time.py new file mode 100755 index 0000000..e08fb27 --- /dev/null +++ b/snowblocks/taskwarrior/hooks/on-modify-track-total-active-time.py @@ -0,0 +1,135 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +# Copyright (c) 2016-present Arctic Ice Studio +# Copyright (c) 2016-present Sven Greb + +# Project: igloo +# Repository: https://github.com/arcticicestudio/igloo +# License: MIT +# References: +# https://taskwarrior.org/docs +# task(1) + +"""A Taskwarrior hook to track the total active time of a task. + +The tracked time is stored in a UDA task duration attribute named ``totalactivetime`` of type ``duration`` holding the total number of seconds the task was +active. The tracked time can then be included in any report by adding the ``totalactivetime`` column. + +By default, this plugin allows to have one task active at a time. This can be changed by setting ``max_active_tasks`` in ``.taskrc`` to a value greater than +``1``. + +Note: + This hook requires Python 3 and the `taskw`_ package to be installed which provides the python bindings for Taskwarrior! + Also note that this hook is only compatible with Taskwarrior version greater or equal to 2.4! + +This hook is a fork from `kostajh/taskwarrior-time-tracking-hook`_ + +.. _taskw: + https://pypi.python.org/pypi/taskw +.. _kostajh/taskwarrior-time-tracking-hook: + https://github.com/kostajh/taskwarrior-time-tracking-hook +""" + +import datetime +import json +import re +import sys +import subprocess +from taskw import TaskWarrior +from typing import TypeVar + +TIME_FORMAT = "%Y%m%dT%H%M%SZ" +UDA_KEY = "totalactivetime" + +w = TaskWarrior() +config = w.load_config() +if "max_active_tasks" in config: + MAX_ACTIVE = int(config["max_active_tasks"]) +else: + MAX_ACTIVE = 1 + +"""Compiled regular expression for the duration as ISO-8601 formatted string.""" +ISO8601DURATION = re.compile("P((\d*)Y)?((\d*)M)?((\d*)D)?T((\d*)H)?((\d*)M)?((\d*)S)?") + +"""The duration type either as integer (in seconds), as ISO-8601 formatted string ("PT1H10M31S") or the seconds suffixed with "seconds".""" +DurationType = TypeVar("DurationType", str, int) + + +def duration_str_to_time_delta(duration_str: DurationType) -> datetime.timedelta: + """Converts duration string into a timedelta object. + + :param duration_str: The duration + :return: The duration as timedelta object + """ + if duration_str.startswith("P"): + match = ISO8601DURATION.match(duration_str) + if match: + year = match.group(2) + month = match.group(4) + day = match.group(6) + hour = match.group(8) + minute = match.group(10) + second = match.group(12) + value = 0 + if second: + value += int(second) + if minute: + value += int(minute) * 60 + if hour: + value += int(hour) * 3600 + if day: + value += int(day) * 3600 * 24 + if month: + # Assume a month is 30 days for now. + value += int(month) * 3600 * 24 * 30 + if year: + # Assume a year is 365 days for now. + value += int(year) * 3600 * 24 * 365 + else: + value = int(duration_str) + elif duration_str.endswith("seconds"): + value = int(duration_str.rstrip("seconds")) + else: + value = int(duration_str) + return datetime.timedelta(seconds=value) + + +def main(): + original = json.loads(sys.stdin.readline()) + modified = json.loads(sys.stdin.readline()) + + # An active task has just been started. + if "start" in modified and "start" not in original: + # Prevent this task from starting if "task +ACTIVE count" is greater than "MAX_ACTIVE". + p = subprocess.Popen(["task", "+ACTIVE", "status:pending", "count", "rc.verbose:off"], stdout=subprocess.PIPE) + out, err = p.communicate() + count = int(out.rstrip()) + if count >= MAX_ACTIVE: + print("Only %d task(s) can be active at a time. " + "See 'max_active_tasks' in .taskrc." % MAX_ACTIVE) + sys.exit(1) + + # An active task has just been stopped. + if "start" in original and "start" not in modified: + # Calculate the elapsed time. + start = datetime.datetime.strptime(original["start"], TIME_FORMAT) + end = datetime.datetime.utcnow() + + if UDA_KEY not in modified: + modified[UDA_KEY] = 0 + + this_duration = (end - start) + total_duration = (this_duration + duration_str_to_time_delta(str(modified[UDA_KEY]))) + print("Total Time Tracked: %s (%s in this instance)" % (total_duration, this_duration)) + modified[UDA_KEY] = str(int(total_duration.days * (60 * 60 * 24) + total_duration.seconds)) + "seconds" + + return json.dumps(modified, separators=(",", ":")) + + +def cmdline(): + sys.stdout.write(main()) + + +if __name__ == "__main__": + cmdline() diff --git a/snowblocks/taskwarrior/snowblock.json b/snowblocks/taskwarrior/snowblock.json index 9e74902..a397c57 100644 --- a/snowblocks/taskwarrior/snowblock.json +++ b/snowblocks/taskwarrior/snowblock.json @@ -21,6 +21,16 @@ "archbook": "nord.theme", "igloo": "nord.theme" } + }, + "~/.task/hooks/on-modify-track-timewarrior.py": { + "create": true, + "force": true, + "path": "hooks/on-modify-track-timewarrior.py" + }, + "~/.task/hooks/on-modify-track-total-active-time.py": { + "create": true, + "force": true, + "path": "hooks/on-modify-track-total-active-time.py" } } } diff --git a/snowblocks/taskwarrior/taskrc b/snowblocks/taskwarrior/taskrc index bc90009..69bdb05 100644 --- a/snowblocks/taskwarrior/taskrc +++ b/snowblocks/taskwarrior/taskrc @@ -17,7 +17,7 @@ data.location=~/.task complete.all.tags=true -default.command=list +default.command=stat editor=vim list.all.projects=true list.all.tags=true @@ -62,12 +62,16 @@ uda.ghi.type=numeric uda.ghi.label=GitHub Issue uda.ghi.default= +uda.totalactivetime.type=duration +uda.totalactivetime.label=Total active time +uda.totalactivetime.values= + #+---------+ #+ Reports + #+---------+ report.stat.description=Optimized and extended status report -report.stat.columns=id,start.age,entry.age,depends.indicator,priority,project,tags,recur.indicator,scheduled,scheduled.relative,due,due.relative,until.remaining,description.count,urgency -report.stat.labels=ID,Active,Age,D,P,Project,Tags,R,Sch,,Due,,Until,Desc,Urg +report.stat.columns=id,start.age,entry.age,totalactivetime,depends.indicator,priority,project,tags,recur.indicator,scheduled,scheduled.relative,due,due.relative,until.remaining,description.count,urgency +report.stat.labels=ID,Active,Age,Time,D,P,Project,Tags,R,Sch,,Due,,Until,Desc,Urg report.stat.filter=status:pending report.stat.sort=start-,due+,project+,urgency- From 15688f308bcad006f0b8db91964729f10c05223c Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Sat, 7 Apr 2018 20:22:52 +0200 Subject: [PATCH 099/214] Add new snowblock for Timewarrior Created a new snowblock for Timewarrior (1) including * the `timewarrior.cfg` configuration (2) files for the `igloo` and `archbook` hosts * a Nord (3) based color theme (4) to be imported in `timewarrior.cfg` > Content >> Reports The default `day` reports should include the month name and week number. > Configuration >> Core Plugins >>> `clean` * `~` * `~/.timewarrior` >>> `link` * "archbook": * `timewarrior.cfg.archbook` => `~/.timewarrior/timewarrior.cfg` * `nord.theme` => `~/.timewarrior/nord.theme` * "igloo": * `timewarrior.cfg.igloo` => `~/.timewarrior/timewarrior.cfg` * `nord.theme` => `~/.timewarrior/nord.theme` References: (1) https://timewarrior.net (2) https://taskwarrior.org/docs/timewarrior/configuration.html (3) https://arcticicestudio.github.io/nord (4) https://taskwarrior.org/docs/timewarrior/themes.html Closes GH-109 --- snowblocks/timewarrior/nord.theme | 25 +++++++++++++++++ snowblocks/timewarrior/snowblock.json | 28 +++++++++++++++++++ .../timewarrior/timewarrior.cfg.archbook | 24 ++++++++++++++++ snowblocks/timewarrior/timewarrior.cfg.igloo | 24 ++++++++++++++++ 4 files changed, 101 insertions(+) create mode 100644 snowblocks/timewarrior/nord.theme create mode 100644 snowblocks/timewarrior/snowblock.json create mode 100644 snowblocks/timewarrior/timewarrior.cfg.archbook create mode 100644 snowblocks/timewarrior/timewarrior.cfg.igloo diff --git a/snowblocks/timewarrior/nord.theme b/snowblocks/timewarrior/nord.theme new file mode 100644 index 0000000..979d14f --- /dev/null +++ b/snowblocks/timewarrior/nord.theme @@ -0,0 +1,25 @@ +# Copyright (c) 2016-present Arctic Ice Studio +# Copyright (c) 2016-present Sven Greb + +# Project: igloo +# Repository: https://github.com/arcticicestudio/igloo +# License: MIT +# References: +# https://taskwarrior.org/docs/timewarrior/themes.html +# timew(1) + +define theme: + description = "An arctic, north-bluish clean and elegant Timewarrior theme." + colors: + exclusion = "bold black" + today = "cyan" + holiday = "bold blue on white" + label = "bold white on black" + ids = "bold black on cyan" + debug = "magenta" + + # Rotating color palette for tags. + palette: + color01 = "bold black on cyan" + color02 = "bold black on bright cyan" + color03 = "bold black on blue" diff --git a/snowblocks/timewarrior/snowblock.json b/snowblocks/timewarrior/snowblock.json new file mode 100644 index 0000000..ed3f460 --- /dev/null +++ b/snowblocks/timewarrior/snowblock.json @@ -0,0 +1,28 @@ +[ + { + "clean": [ + "~", + "~/.timewarrior" + ] + }, + { + "link": { + "~/.timewarrior/timewarrior.cfg": { + "create": true, + "force": true, + "hosts": { + "archbook": "timewarrior.cfg.archbook", + "igloo": "timewarrior.cfg.igloo" + } + }, + "~/.timewarrior/nord.theme": { + "create": true, + "force": true, + "hosts": { + "archbook": "nord.theme", + "igloo": "nord.theme" + } + } + } + } +] diff --git a/snowblocks/timewarrior/timewarrior.cfg.archbook b/snowblocks/timewarrior/timewarrior.cfg.archbook new file mode 100644 index 0000000..efbfdb7 --- /dev/null +++ b/snowblocks/timewarrior/timewarrior.cfg.archbook @@ -0,0 +1,24 @@ +# Copyright (c) 2016-present Arctic Ice Studio +# Copyright (c) 2016-present Sven Greb + +# Project: igloo +# Repository: https://github.com/arcticicestudio/igloo +# License: MIT +# References: +# https://taskwarrior.org/docs/timewarrior +# timew(1) + +#+----+ +#+ UI + +#+----+ +import /home/sgreb/.timewarrior/nord.theme +color = true + +#+---------+ +#+ Reports + +#+---------+ +define reports: + day: + lines = 10 + month = true + week = true diff --git a/snowblocks/timewarrior/timewarrior.cfg.igloo b/snowblocks/timewarrior/timewarrior.cfg.igloo new file mode 100644 index 0000000..68a20d9 --- /dev/null +++ b/snowblocks/timewarrior/timewarrior.cfg.igloo @@ -0,0 +1,24 @@ +# Copyright (c) 2016-present Arctic Ice Studio +# Copyright (c) 2016-present Sven Greb + +# Project: igloo +# Repository: https://github.com/arcticicestudio/igloo +# License: MIT +# References: +# https://taskwarrior.org/docs/timewarrior +# timew(1) + +#+----+ +#+ UI + +#+----+ +import /home/arcticicestudio/.timewarrior/nord.theme +color = true + +#+---------+ +#+ Reports + +#+---------+ +define reports: + day: + lines = 10 + month = true + week = true From 759fdc698f566eed5539d5f90e4b4e8c8395ae4c Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Sun, 8 Apr 2018 09:30:04 +0200 Subject: [PATCH 100/214] Integrate taskopen Integrated taskopen (1) by adding * the main `.taskopenrc` configuration file (2) * aliases to simply add notes (`an`) and open (`o`) task notes / annotations References: (1) https://github.com/ValiValpas/taskopen (2) https://github.com/ValiValpas/taskopen#configuration Closes GH-110 --- snowblocks/taskwarrior/snowblock.json | 7 +++++++ snowblocks/taskwarrior/taskopenrc | 19 +++++++++++++++++++ snowblocks/taskwarrior/taskrc | 4 +++- 3 files changed, 29 insertions(+), 1 deletion(-) create mode 100644 snowblocks/taskwarrior/taskopenrc diff --git a/snowblocks/taskwarrior/snowblock.json b/snowblocks/taskwarrior/snowblock.json index a397c57..e6ec4f8 100644 --- a/snowblocks/taskwarrior/snowblock.json +++ b/snowblocks/taskwarrior/snowblock.json @@ -14,6 +14,13 @@ "igloo": "taskrc" } }, + "~/.taskopenrc": { + "force": true, + "hosts": { + "archbook": "taskopenrc", + "igloo": "taskopenrc" + } + }, "~/.task/nord.theme": { "create": true, "force": true, diff --git a/snowblocks/taskwarrior/taskopenrc b/snowblocks/taskwarrior/taskopenrc new file mode 100644 index 0000000..fd777bf --- /dev/null +++ b/snowblocks/taskwarrior/taskopenrc @@ -0,0 +1,19 @@ +# Copyright (c) 2016-present Arctic Ice Studio +# Copyright (c) 2016-present Sven Greb + +# Project: igloo +# Repository: https://github.com/arcticicestudio/igloo +# License: MIT +# References: +# https://github.com/ValiValpas/taskopen +# taskopenrc(5) +# taskopen(1) + +#+------+ +#+ Core + +#+------+ +NOTES_FOLDER="~/.task/notes/" +NOTES_EXT=".md" +NOTES_CMD="atom --add ~/.task/notes/$UUID.md" + +PATH_EXT=/usr/share/taskopen/scripts diff --git a/snowblocks/taskwarrior/taskrc b/snowblocks/taskwarrior/taskrc index 69bdb05..1226803 100644 --- a/snowblocks/taskwarrior/taskrc +++ b/snowblocks/taskwarrior/taskrc @@ -8,7 +8,7 @@ # https://taskwarrior.org/docs # https://taskwarrior.org/docs/terminology.html#regex # taskrc(5) -# task-sync(5) +# task(1) # https://en.wikibooks.org/wiki/Regular_Expressions/POSIX-Extended_Regular_Expressions #+------+ @@ -79,8 +79,10 @@ report.stat.sort=start-,due+,project+,urgency- #+ Aliases + #+---------+ alias.a=add +alias.an=annotate -- Notes alias.bd=burndown.daily alias.cx=context alias.e=edit alias.ls=list alias.mod=modify +alias.o=execute taskopen From 5ff0de45dfd6c59305a82121efe0755117c637f0 Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Sat, 16 Jun 2018 21:09:00 +0200 Subject: [PATCH 101/214] Add snowflake for "udev" key mappings for "Logitech R400 Presenter" Created a new snowflake for "udev" (1) including a custom rule with mappings for the "Logitech R400 Presenter" (2) optimized for presentations made with the React library "Spectacle" (3) and the "Code Slide" (4) extension. The documentation contains detailed information about the functionality, install & usage instructions for _udev_ custom rules. References: (1) https://wiki.archlinux.org/index.php/udev (2) https://www.logitech.com/en-us/product/wireless-presenter-r400 (3) https://formidable.com/open-source/spectacle (4) https://github.com/jamiebuilds/spectacle-code-slide Closes GH-111 --- snowflakes/udev/README.md | 160 ++++++++++++++++++ .../igloo-udev-logitech-r400-presenter.hwdb | 12 ++ 2 files changed, 172 insertions(+) create mode 100644 snowflakes/udev/README.md create mode 100644 snowflakes/udev/rules/igloo-udev-logitech-r400-presenter.hwdb diff --git a/snowflakes/udev/README.md b/snowflakes/udev/README.md new file mode 100644 index 0000000..b75a85a --- /dev/null +++ b/snowflakes/udev/README.md @@ -0,0 +1,160 @@ +* [Mapping scancodes to keycodes](#mapping-scancodes-to-keycodes) + * [Logitech R400 Presenter](#logitech-r400-presenter) + * [Find out the input event ID](#find-out-the-input-event-id) + * [Identifying the scancodes](#identifying-the-scancodes) + * [Update and reload the Hardware Database Index](#update-and-reload-the-hardware-database-index) + * [Verify the new mappings](#verify-the-new-mappings) + +# Mapping scancodes to keycodes + +## Logitech R400 Presenter + +The [Logitech R400 Presenter][logitech-r400-presenter] works out-of-the-box™ for presentations made with the React library [Spectacle][], but can not be used for the [Code Slide][gh-jamiebuilds/spectacle-code-slide] extension because it requires to use the and keys. + +The presenter itself includes two more controls for slideshows: + +* „play“ (lower-left) +* „toggle screen“ (lower-right) + +These are designed for applications like _LibreOffice Impress_ or _Microsoft PowerPoint_, but have no meaningful use for _Spectacle_-based presentations. [udev][archw-udev] can be used to change the mappings for both buttons to fire key events for the and keys instead. This allows to also use the presenter for presentations with the _Code Slide_ extension. + +Make sure to read the Arch Linux Wiki pages about [extra keyboard keys][archw-extra-keyboard-keys] and how to [map scancodes to keycodes][archw-map-scancodes-to-keycodes] to get more information about the way it works. There is also a blog post about [tweaking the Logitech R400 presenter tool on Linux][ref-blog-rweaking-r400]. + +The [`igloo-udev-logitech-r400-presenter.hwdb`][gh-igloo-udev-logitech-r400-presenter.hwdb] file contains custom mappings to this use case and be installed by copying it to the `/etc/udev/hwdb.d` directory. The following subsections contain information about the creation and functionality of this file. + +### Find out the input event ID + +The first column of a udev rule represents the scancode. It can be obtained by looking up which input event ID the device was tied to: + +```sh +ls /dev/input/by-id/usb-Logitech_USB_Receiver-event-kbd +``` +Alternatively, `stat` can be used: + +```sh +stat -t /dev/input/by-id/usb-Logitech_USB_Receiver-event-kbd --printf "%N\n" +``` + +This will print the target of the symlink, e.g. `event15`. Verify the result of the bound event ID against the `/proc/bus/input/devices`: + +```sh +cat /proc/bus/input/devices | rg --context 10 Logitech +``` + +### Identifying the scancodes + +Run [evtest][archpkg-evtest] (or `showkey` when using a virtual console in a non-graphical environment) against the input event and press one of the buttons on the presenter. This will print the scancode and keycode. + +```sh +# Will require root privileges +evtest /dev/input/ +# Example: evtest /dev/input/event15 +``` + +**Example result for all buttons**: + +```sh +# ... +Testing ... (interrupt to exit) +# key "left" +Event: time 1529159600.115918, type 4 (EV_MSC), code 4 (MSC_SCAN), value 7004b +Event: time 1529159600.115918, type 1 (EV_KEY), code 104 (KEY_PAGEUP), value 1 +Event: time 1529159600.115918, -------------- SYN_REPORT ------------ +Event: time 1529159600.195903, type 4 (EV_MSC), code 4 (MSC_SCAN), value 7004b +Event: time 1529159600.195903, type 1 (EV_KEY), code 104 (KEY_PAGEUP), value 0 +Event: time 1529159600.195903, -------------- SYN_REPORT ------------ +# key "right" +Event: time 1529159620.267783, type 4 (EV_MSC), code 4 (MSC_SCAN), value 7004e +Event: time 1529159620.267783, type 1 (EV_KEY), code 109 (KEY_PAGEDOWN), value 1 +Event: time 1529159620.267783, -------------- SYN_REPORT ------------ +Event: time 1529159620.387780, type 4 (EV_MSC), code 4 (MSC_SCAN), value 7004e +Event: time 1529159620.387780, type 1 (EV_KEY), code 109 (KEY_PAGEDOWN), value 0 +Event: time 1529159620.387780, -------------- SYN_REPORT ------------ +# key "play" +Event: time 1529159635.691683, type 4 (EV_MSC), code 4 (MSC_SCAN), value 7003e +Event: time 1529159635.691683, type 1 (EV_KEY), code 425 (KEY_PRESENTATION), value 1 +Event: time 1529159635.691683, -------------- SYN_REPORT ------------ +Event: time 1529159635.851676, type 4 (EV_MSC), code 4 (MSC_SCAN), value 7003e +Event: time 1529159635.851676, type 1 (EV_KEY), code 425 (KEY_PRESENTATION), value 0 +Event: time 1529159635.851676, -------------- SYN_REPORT ------------ +# key "toggle screen" +Event: time 1529159644.331624, type 4 (EV_MSC), code 4 (MSC_SCAN), value 70037 +Event: time 1529159644.331624, type 1 (EV_KEY), code 431 (KEY_DISPLAYTOGGLE), value 1 +Event: time 1529159644.331624, -------------- SYN_REPORT ------------ +Event: time 1529159644.459619, type 4 (EV_MSC), code 4 (MSC_SCAN), value 70037 +Event: time 1529159644.459619, type 1 (EV_KEY), code 431 (KEY_DISPLAYTOGGLE), value 0 +Event: time 1529159644.459619, -------------- SYN_REPORT ------------ +# ... +``` + +This example shows that + +* `KEY_PAGEUP` (left) has scancode `7004b` and keycode `104` +* `KEY_PAGEDOWN` (right) has scancode `7004e` and keycode `109` +* `KEY_PRESENTATION` („play“) has scancode `7003e` and keycode `425` +* `KEY_DISPLAYTOGGLE` (toggle screen“) has scancode `70037` and keycode `431` + +### Create the custom udev rule + +**Note**: Make sure to read the Arch Linux Wiki about how to [map scancodes to keycodes using udev][archw-map-scancodes-to-keycodes] and `udev(7)`! They contain details about + +* the _udev_ hardware database index `/etc/udev/hwdb.bin`. +* the default custom rule paths `/usr/lib/udev/hwdb.d/`, `/run/udev/hwdb.d/` and `/etc/udev/hwdb.d/`. +* the default _scancodes-to-keycodes_ mapping files `/usr/lib/udev/hwdb.d/60-keyboard.hwdb` and `/lib/udev/hwdb.d/60-keyboard.hwdb` which are already include default mappings for the Logitech R400 presenter: `rg --context 6 R400 /usr/lib/udev/hwdb.d/60-keyboard.hwdb` + +Create a new custom `.hwdb` file in the `/etc/udev/hwdb.d` directory, e.g. `/etc/udev/hwdb.d/igloo-udev-logitech-r400-presenter.hwdb`: + +```raw +evdev:input:b0003v046DpC52D* + KEYBOARD_KEY_07004b=left + KEYBOARD_KEY_07004e=right + KEYBOARD_KEY_07003e=up + KEYBOARD_KEY_070037=down +``` + +This maps the „play“ and „toggle screen“ button to the (up) and (down) keys. **Note that the single whitespace character at the beginning of each mapping line is required!** + +### Update and reload the Hardware Database Index + +By default, the `systemd-hwdb-update.service` service takes care to rebuilt the hardware database index file `/etc/udev/hwdb.bin` on boot and after a systemd update as [described in the Arch Wiki][archw-map-scancodes-to-keycodes-index-update]. + +To apply newly added mappings or configuration changes without a reboot, the index needs to be rebuilt and reloaded manually: + +```sh +# Built the index file (will require root privileges)... +systemd-hwdb update + +# ...and reload it. +udevadm trigger +``` + +### Verify the new mappings + +To verify that the new mappings have successfully been applied the hardware database index can be queried with `udevadm`: + +```sh +udevadm info /dev/input/by-id/usb-Logitech_USB_Receiver-event-kbd | rg KEYBOARD_KEY +``` + +**Example output**: + +```sh +# ... +E: KEYBOARD_KEY_070029=presentation +E: KEYBOARD_KEY_070037=down +E: KEYBOARD_KEY_07003e=up +E: KEYBOARD_KEY_07004b=left +E: KEYBOARD_KEY_07004e=right +# ... +``` + +[archpkg-evtest]: https://www.archlinux.org/packages/community/x86_64/evtest +[archw-extra-keyboard-keys]: https://wiki.archlinux.org/index.php/Extra_keyboard_keys +[archw-map-scancodes-to-keycodes]: https://wiki.archlinux.org/index.php/Map_scancodes_to_keycodes#Using_udev +[archw-map-scancodes-to-keycodes-index-update]: https://wiki.archlinux.org/index.php/Map_scancodes_to_keycodes#Updating_the_Hardware_Database_Index +[archw-udev]: https://wiki.archlinux.org/index.php/Udev +[gh-jamiebuilds/spectacle-code-slide]: https://github.com/jamiebuilds/spectacle-code-slide +[gh-igloo-udev-logitech-r400-presenter.hwdb]: https://github.com/arcticicestudio/igloo/blob/develop/snowflakes/udev/rules/igloo-udev-logitech-r400-presenter.hwdb +[logitech-r400-presenter]: https://www.logitech.com/en-us/product/wireless-presenter-r400 +[ref-blog-rweaking-r400]: https://derickrethans.nl/logitech-r400-take2.html +[spectacle]: https://formidable.com/open-source/spectacle diff --git a/snowflakes/udev/rules/igloo-udev-logitech-r400-presenter.hwdb b/snowflakes/udev/rules/igloo-udev-logitech-r400-presenter.hwdb new file mode 100644 index 0000000..171812b --- /dev/null +++ b/snowflakes/udev/rules/igloo-udev-logitech-r400-presenter.hwdb @@ -0,0 +1,12 @@ +# Copyright (c) 2016-present Arctic Ice Studio +# Copyright (c) 2016-present Sven Greb + +# Project: igloo +# Repository: https://github.com/arcticicestudio/igloo +# License: MIT + +evdev:input:b0003v046DpC52D* + KEYBOARD_KEY_07004b=left + KEYBOARD_KEY_07004e=right + KEYBOARD_KEY_07003e=up + KEYBOARD_KEY_070037=down From b9d8518472190524a6b0f6a9a64756363e2b8cea Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Sat, 8 Sep 2018 15:31:33 +0200 Subject: [PATCH 102/214] Reverse solution from GH-64 1. Deleted the custom `git-diff-igloocrypt` script 2. Removed the custom `[diff "igloocrypt"]` section from the `gitconfig` file 3. Removed the custom filter "igloocrypt" from the `gitconfig` file 4. Updated the `filter` and `diff` custom global Git attributes handler for all `*.igloocrypt` files to the new `git-crypt` setup GH-113 --- snowblocks/git/git-diff-igloocrypt | 12 ------------ snowblocks/git/gitattributes | 4 +++- snowblocks/git/gitconfig | 7 ------- snowblocks/git/snowblock.json | 1 - 4 files changed, 3 insertions(+), 21 deletions(-) delete mode 100755 snowblocks/git/git-diff-igloocrypt diff --git a/snowblocks/git/git-diff-igloocrypt b/snowblocks/git/git-diff-igloocrypt deleted file mode 100755 index a3080d4..0000000 --- a/snowblocks/git/git-diff-igloocrypt +++ /dev/null @@ -1,12 +0,0 @@ -#!/usr/bin/env bash -# Copyright (c) 2016-2017 Arctic Ice Studio -# Copyright (c) 2016-2017 Sven Greb - -# Project: igloo -# Repository: https://github.com/arcticicestudio/igloo -# License: MIT - -# GPG decryption command for the "igloocrypt" diff filter -# The output is redirected to suppress error messages caused by the Git filter flow. - -gpg --decrypt --batch --no-tty "$1" > /dev/null 2>&1 || cat $1 diff --git a/snowblocks/git/gitattributes b/snowblocks/git/gitattributes index 400e25b..2fa4441 100644 --- a/snowblocks/git/gitattributes +++ b/snowblocks/git/gitattributes @@ -10,5 +10,7 @@ # https://www.gnupg.org # https://wiki.archlinux.org/index.php/GnuPG -*.igloocrypt filter=igloocrypt diff=igloocrypt +*.igloocrypt filter=git-crypt diff=git-crypt .gitattributes !filter !diff +.gitignore !filter !diff +.gitmodules !filter !diff diff --git a/snowblocks/git/gitconfig b/snowblocks/git/gitconfig index 35874a9..a65ec72 100755 --- a/snowblocks/git/gitconfig +++ b/snowblocks/git/gitconfig @@ -54,9 +54,6 @@ tool = intellij compactionHeuristic = true -[diff "igloocrypt"] - textconv = "~/.git-diff-igloocrypt" - [difftool "intellij"] prompt = true cmd = idea diff $(cd $(dirname "$LOCAL") && pwd)/$(basename "$LOCAL") $(cd $(dirname "$REMOTE") && pwd)/$(basename "$REMOTE") @@ -70,10 +67,6 @@ [interactive] diffFilter = diff-so-fancy -[filter "igloocrypt"] - clean = "gpg --encrypt --recipient 60C54F1519346085" - smudge = "gpg --decrypt" - [merge] tool = intellij ff = false diff --git a/snowblocks/git/snowblock.json b/snowblocks/git/snowblock.json index 424439a..471b96a 100644 --- a/snowblocks/git/snowblock.json +++ b/snowblocks/git/snowblock.json @@ -11,7 +11,6 @@ } }, "~/.git-commit-msg": null, - "~/.git-diff-igloocrypt": null, "~/.gitconfig": null, "~/.gitconfig_auth": { "hosts": { From 6cb24f2ee51f595245a086410e1a775cfca5d829 Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Sat, 8 Sep 2018 15:58:12 +0200 Subject: [PATCH 103/214] Remove currently encrypted files 1. Decrypted all `*.igloocrypt` files and backuped them up outside the repository 2. Deleted all `*.igloocrypt` files within the repository GH-113 --- snowblocks/git/gitconfig_auth | 5 ----- snowblocks/git/gitconfig_auth_job.igloocrypt | Bin 690 -> 0 bytes snowblocks/git/snowblock.json | 12 ------------ .../tilix/bookmarks.json.archbook.igloocrypt | Bin 966 -> 0 bytes snowblocks/tilix/bookmarks.json.igloo.igloocrypt | Bin 876 -> 0 bytes snowblocks/tilix/snowblock.json | 11 ----------- snowblocks/xdg/snowblock.json | 8 -------- 7 files changed, 36 deletions(-) delete mode 100644 snowblocks/git/gitconfig_auth delete mode 100644 snowblocks/git/gitconfig_auth_job.igloocrypt delete mode 100644 snowblocks/tilix/bookmarks.json.archbook.igloocrypt delete mode 100644 snowblocks/tilix/bookmarks.json.igloo.igloocrypt diff --git a/snowblocks/git/gitconfig_auth b/snowblocks/git/gitconfig_auth deleted file mode 100644 index 55f85fb..0000000 --- a/snowblocks/git/gitconfig_auth +++ /dev/null @@ -1,5 +0,0 @@ -[user] - name = Arctic Ice Studio - email = development@arcticicestudio.com - signingkey = 60C54F1519346085 - useconfigonly = true diff --git a/snowblocks/git/gitconfig_auth_job.igloocrypt b/snowblocks/git/gitconfig_auth_job.igloocrypt deleted file mode 100644 index 17d731e3d3378c27770fc0becc0fd9ae3b673146..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 690 zcmV;j0!{se0t^H4xkqa?CzqW85B@wp+t_+%#8vY4K!TfelCHM?fc5W;@WR!YV;^m_ z_edc%o9cCH*M6+=a{q|<$v*5eKkDZe26NMNqI2QE!t((vQh>T^B*}h_KEni6I~dOE z0${LLW++bIq2xg!Zajd}8QQEzj~2*4NR}w`e85@TsIVg&W~Dt{VN8ULQ@F=y=B5s}c><*}&8`xY>~aYHRbVFB33fJ=+Qu&2|Nx5)Ysb!bTM?s=->0bztPRUcI+mwTVtbEfPr|Ec=O9#u^q7+}+m(`zUDcHN10{+WO3q=ZLCGXtzv*$1pf z;#_1<`7=NvDrlbBO$vgN5bXTGGRxJz9?U?i#0}1rXUF45OO%2RZi1U2CBUY#ML%ta zb1b+ACtGaA5dk-A`CIP{{b^5aG1~PHHVFW9xc&_-K;PjF7K(H&KmsR1`fkWbq)1=HD~@M2bmo6u%k{ZW{s_mmG(<-YtC5GwG!{xfYorW^ z7YCI9_r$(6kqQX)t2X;fqkaC%pK>m}Dyqo>BcO3Moz-HP1Qn*TtLOn_x{~ok;AbbP YYhRZ<`QU~G?Q}^x*p=+dpG||t3yK_2XaE2J diff --git a/snowblocks/git/snowblock.json b/snowblocks/git/snowblock.json index 471b96a..3c62dfe 100644 --- a/snowblocks/git/snowblock.json +++ b/snowblocks/git/snowblock.json @@ -12,18 +12,6 @@ }, "~/.git-commit-msg": null, "~/.gitconfig": null, - "~/.gitconfig_auth": { - "hosts": { - "archbook": "gitconfig_auth", - "igloo": "gitconfig_auth" - } - }, - "~/.gitconfig_auth_job": { - "hosts": { - "archbook": "gitconfig_auth_job.igloocrypt", - "igloo": "gitconfig_auth_job.igloocrypt" - } - }, "~/.gitignore": null } } diff --git a/snowblocks/tilix/bookmarks.json.archbook.igloocrypt b/snowblocks/tilix/bookmarks.json.archbook.igloocrypt deleted file mode 100644 index 4c1b1fcae772b604811505ec59bc6d2293f5aef0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 966 zcmV;%13CPK0t^H4xkqa?CzqW85C2@lcas@;pG(+2ElCeoGq;DQh9nltWZ)X@(RRdA zBIEMnaHwS5ZU+mzmGFrbTK8GMf9uYSlx5E{%tpYD0{_}H#K6NP84`lTR{oax<=0hB zq3ZI*%tZ{k`)rgv?6>G5>l!+=5-YWe^Oqn?FDLKj3w!sh@M9XxYV1d1uh!)c)zqO= zpPyDppGlO)ON~IP^Dn@!E8js04kruzy>Ur3ouZS!6U!T0%1@H#&2k>|9H_uOr(XQ( zv*PyBCm~FdB9k^QTqBr6^N@3l%iD9hO!SKmDz8;uOSQeE_Uyw!W+!?zhIJJ(^`qgo zycEXn^9G<;Q7SiB@ftX*it!EN4J^rf?Pb33U?7u#`xwOJiz{ zWInsA-<%W`$x}Q06VPs5^7R}|1O4SO?dA>Fz+%9@K2Fc~8IWk0Z3CQ3-j6AHKRI-^ zJ6xccueh=mJ5jrRN>m1v<345tJs37|0bAsKp9?Tyyp9^u>4jc^iq9`g=Es|%`@1sHN(zGm?c2qdYmK9@GDMyKWCOZ)BNvG omew?fb|m%@7Up_`-d_p(IrsX86`reNn0h!7jNiY4S8V03OxsA|M*si- diff --git a/snowblocks/tilix/bookmarks.json.igloo.igloocrypt b/snowblocks/tilix/bookmarks.json.igloo.igloocrypt deleted file mode 100644 index ba0530e05d6bf45f6b2bebb9683210a6f5b3799c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 876 zcmV-y1C#uP0t^H4xkqa?CzqW85C3)0BMZS_+{<9prU#2p@3?}jPsN=#yjM_$%o1{; zH#<6l#D?R--*8AwX zLPs%pa}4Q@`()@>%UOxiI-OnQENHqsLfPir^*W@|rwso$e7~eCYB|MSSSh&^6pnTZ zgq8!2D-EAS!%4|Pxit=;>OPpe!(mHsE}Y*s zRsf+nqgL@*G*|3J*DquO$?yKhTHoM@ITfISV$3h0lqh^tz@^(HqLrQAdd|<(o+9Z5 zf)QReOwakb&9xa}w$EjelgrW6l;eXfn=fd@MGm!OtN@@tZYP$>hGDG+t8af-wOMi2 z@^8tL7a5L4(5jTJcSR~L7|x-qSzqQSc7=vIG<5T{EaW@MmY+V z&a2qVsHxJeuo$u>bmG#$ngIvzQu@5ld;DERf+Y(ulCP=g7<*e;i%l5G z%=rEBj_7Ku6+ECDcmZdQJ9=uG%jv5vqvn4=uE%4T2q{czLgY=k48|+2wBz zr{OHu6v8NNGN{IIe8?V|X?HN0?x^r=)#Yi&w9vHG_LDt(t|R2*rz@0izp)ZXkp$D CgTGP$ diff --git a/snowblocks/tilix/snowblock.json b/snowblocks/tilix/snowblock.json index a25a4a1..0ca743b 100644 --- a/snowblocks/tilix/snowblock.json +++ b/snowblocks/tilix/snowblock.json @@ -1,16 +1,5 @@ [ { "clean": ["~/.config/tilix"] - }, - { - "link": { - "~/.config/tilix/bookmarks.json": { - "create": true, - "hosts": { - "archbook": "bookmarks.json.archbook.igloocrypt", - "igloo": "bookmarks.json.igloo.igloocrypt" - } - } - } } ] diff --git a/snowblocks/xdg/snowblock.json b/snowblocks/xdg/snowblock.json index b7fbd04..6bb4347 100644 --- a/snowblocks/xdg/snowblock.json +++ b/snowblocks/xdg/snowblock.json @@ -18,14 +18,6 @@ "~/.config/user-dirs.locale": { "force": true }, - "~/.config/gtk-3.0/bookmarks": { - "create": true, - "force": true, - "hosts": { - "archbook": "gtk-3.0/bookmarks.archbook.igloocrypt", - "igloo": "gtk-3.0/bookmarks.igloo.igloocrypt" - } - }, "~/.local/share/applications/atom.desktop": { "create": true, "force": true, From 4362ef5152e656d76c60600a0486e3d7271245df Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Sat, 8 Sep 2018 16:05:01 +0200 Subject: [PATCH 104/214] Initialize "git"crypt" and add Arctic Ice Studio GPG key 1. Initialized `git-crypt` for the repository: `git-crypt init` (default key) 2. Added the main Arctic Ice Studio GPG key: `git-crypt add-gpg-user -n ` (`-n` flag prevents automatic commit of generated files) GH-113 --- .git-crypt/.gitattributes | 4 ++++ .../40F729E5476E46C260F8556E60C54F1519346085.gpg | Bin 0 -> 725 bytes 2 files changed, 4 insertions(+) create mode 100644 .git-crypt/.gitattributes create mode 100644 .git-crypt/keys/default/0/40F729E5476E46C260F8556E60C54F1519346085.gpg diff --git a/.git-crypt/.gitattributes b/.git-crypt/.gitattributes new file mode 100644 index 0000000..665b10e --- /dev/null +++ b/.git-crypt/.gitattributes @@ -0,0 +1,4 @@ +# Do not edit this file. To specify the files to encrypt, create your own +# .gitattributes file in the directory where your files are. +* !filter !diff +*.gpg binary diff --git a/.git-crypt/keys/default/0/40F729E5476E46C260F8556E60C54F1519346085.gpg b/.git-crypt/keys/default/0/40F729E5476E46C260F8556E60C54F1519346085.gpg new file mode 100644 index 0000000000000000000000000000000000000000..07ecdfdac97eb64b8e109a451f611c3492d4b454 GIT binary patch literal 725 zcmV;`0xJE50t^H4xkqa?CzqW85BvxQF=!TU*1X=jD4R+)pVCV?0dSzRv#NFZs><4u zIrq1qz%}T21RuVV0ClFtFwYqRb$jihPq7AF=ex<~&1sClcx{(J;Zd57nKU0{EZd+m6 z@4)7|9oRv+EXi!L>KGLxVgk4&;eEhxYBST-;OzN*(N}Xhvqn-DZ(b&i&Sg2SRnS?T z4EnG$B1mMvP`#<$zRYCQv>TWk?BCkA{(y7f*t7WRf0uK>hRh z=sJNTAZwcsgEg;`R>GZ4nS zS|7b)t;xrqVkLO)f9@C=pzz86t@k4#(a5wm0z`0eg8zaRwAj6m?`Z#EqXz zF!~vl$`vDvDvCtekW!4Cfv2YR+!R7d3z6%h*^B46Gh2psJI)h>pCdTf*&BDnYymC| z{LL H2)A9-QI}s0 literal 0 HcmV?d00001 From cff197e9051fbb0c725f55aee07fa1a39bc44370 Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Sat, 8 Sep 2018 16:09:47 +0200 Subject: [PATCH 105/214] Remove forgotten "old" encrypted files GH-113 --- .../xdg/gtk-3.0/bookmarks.archbook.igloocrypt | Bin 734 -> 0 bytes snowblocks/xdg/gtk-3.0/bookmarks.igloo.igloocrypt | Bin 742 -> 0 bytes 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 snowblocks/xdg/gtk-3.0/bookmarks.archbook.igloocrypt delete mode 100644 snowblocks/xdg/gtk-3.0/bookmarks.igloo.igloocrypt diff --git a/snowblocks/xdg/gtk-3.0/bookmarks.archbook.igloocrypt b/snowblocks/xdg/gtk-3.0/bookmarks.archbook.igloocrypt deleted file mode 100644 index 7e37949c76c3f6efdb8acbed8a3e3e120e5b4d35..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 734 zcmV<40wMi{0t^H4xkqa?CzqW85C2?Q@-UEh0%AFv7ROuxEqs6*LasrEs(45fj6~L6 zIi-ny@-=T`BdJFHbK$~6*A^JNOETrVO~CRHQm4175Rb5r)*A+s>e5#PD~qgu^kR^@ z%Ph%OvU75(mJYDr1*`BcA_*p$gg?GymiGtqWC2!OEiK$|GmmQPtz&J z1^u&&mQAy&#ldHLN++dV>rYSEca927U=&}DP>?fbQ6SrrO}aS;hu86RG`a@1AO(1G zSQK+{%ww60hec-5FvTLWJ|Y!llvGmA(Q~T@TBGNbI{B>qT*qZ~y9>!VUDRskcEUl^ zv5g)#1l`jcrl(-QX5oqnfWQA7701Bec?;CN4cIph*zJB=J#bcM2sU=l=ith0|Flq1 zjd)ogk}QW1iE(!KX?0;|GfkI(2%cSx@RStbigW8LNMKL5v`cR1qq#yD5%#PD+QN<^ zEYsd*0cO*!7USUtnf(i4;I^wY`(3y!sDs6hVv`deB|)6welQM9g7}Ivq8IoHVTcH! z2pajoMVxi_zA>2>KH;O*!0JL%PCp=!*^O!D^_nRx_dY6fg{z#DT|$R;V9E42JE*;C zOKP8p?D)`Hq9*D1+OrqzvA7q#WcXxsj*mr0mO(V##L9N~No*en+enP%6k>JH)c>Mf zP;G^iV`l7x%6(;NrK!@u3<1=?J=u3qJgV?eY=m&GbNu68e;a(1e8Ft*jpJ9~Ou_p3 zZY+OJ8n9PjMz!FJz8nwz!M(G5AV!h*jo;0k6KPsHz{}g(f9EnUL~3{boFySXN3N`} zZ%-CuoX!Qh6N*JFYW=Ulu?bMa>q{4Ci$$UZK@zooUQX5!L3(?f#gswb#$_W3vk!Y$ zD26$%t3(O1fs47nwD_g}EI3K(D>vd&bLhiEnMMlb`cR@?|8swvQD{G>I$^!-k#Q>) QjObirS9nq^0vF z0s=K{f+eiEf)M+ycH`E0ULG}x4A}hZ0IT?ACJ)vBCJXP(DEZf(d$Xu9aXz#(yepTK z*)e3Xa*&?^l{#x+Nh#>`Ib*qDpk`c?uT}M`a(!n@c1tt2nP}{LnIYWfPWv z@Vr&AG+{vSardJ)+zgdL`o&D7pQi9K%Z|ttON?_9iwf#!Z=1s7f!V($aNre7tL7GD z(5h;LPq&B1v)o6SFX{#4Uv*|cr*wQ_iMch`Qk9zK{B z(U_mjM}`X=nBx(RMx9$j{G=SA)v7)Rz%hlp)B%i+dK|9jU9vL!JJW7?$$^Dfi6R3h zWo}!OJ~C1-du75T_b$*4*oge(KEB?}Bi_a|9t;BYU({Mkc`_#u!HB~@90NrG6xHPi ztYu{#N5)I1lWqd(Z<*pKMw@s+mxRd@&a~2kP61Sc)-sSLWL~+nkH+Ix>_}tRK6ajI-2#vltWD@e4Xcp7#Yc%1R70A%h3)g=*17aZhpGfd$ahcVxIY~=&?vnZ-8dEr6ky#=wH*fq~WF715dNEztF41-;TmZ39^sg!;fSlmv zTUQG~Y_?(WX_tB$#lVt#;-C9~aWi1oQwPx^W?4Dyw?k3h40mLG1tn)p+}g|n7a)U= zH25=V^_R;#WN!z~H#qTxm@Hxfq4Bxn`yJRxpNBLU?Rd`C#MDgs`ddn>lH;Lt_u4+# Yi&NzrMBK>40}@QR$;pHG$o1+&MblAhIsgCw From b079adbf484c0a57688a24c68ea018ccd0b60cb1 Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Sat, 8 Sep 2018 16:30:51 +0200 Subject: [PATCH 106/214] Add (backed up) previously encrypted files back again 1. Unlocked the repository: `git-crypt unlock` 2. Added all backed up `*.igloocrypt` files back into the repository 3. Ensured all `*.igloocrypt` are tracked to be encryped: `git-crypt status` After this commit the encryption can be validated to by locking the repository again: `git-crypt lock` GH-113 --- snowblocks/git/gitconfig | 16 ++++++++-------- snowblocks/git/gitconfig-auth-job.igloocrypt | Bin 0 -> 136 bytes .../git/gitconfig-auth-svengreb.igloocrypt | Bin 0 -> 139 bytes snowblocks/git/gitconfig-auth.igloocrypt | Bin 0 -> 155 bytes snowblocks/git/snowblock.json | 18 ++++++++++++++++++ .../tilix/bookmarks-archbook.json.igloocrypt | Bin 0 -> 1839 bytes .../tilix/bookmarks-igloo.json.igloocrypt | Bin 0 -> 1530 bytes snowblocks/tilix/snowblock.json | 11 +++++++++++ .../xdg/gtk-3.0/bookmarks-archbook.igloocrypt | Bin 0 -> 328 bytes .../xdg/gtk-3.0/bookmarks-igloo.igloocrypt | Bin 0 -> 418 bytes snowblocks/xdg/snowblock.json | 8 ++++++++ 11 files changed, 45 insertions(+), 8 deletions(-) create mode 100644 snowblocks/git/gitconfig-auth-job.igloocrypt create mode 100644 snowblocks/git/gitconfig-auth-svengreb.igloocrypt create mode 100644 snowblocks/git/gitconfig-auth.igloocrypt create mode 100644 snowblocks/tilix/bookmarks-archbook.json.igloocrypt create mode 100644 snowblocks/tilix/bookmarks-igloo.json.igloocrypt create mode 100644 snowblocks/xdg/gtk-3.0/bookmarks-archbook.igloocrypt create mode 100644 snowblocks/xdg/gtk-3.0/bookmarks-igloo.igloocrypt diff --git a/snowblocks/git/gitconfig b/snowblocks/git/gitconfig index a65ec72..b919c2d 100755 --- a/snowblocks/git/gitconfig +++ b/snowblocks/git/gitconfig @@ -11,28 +11,28 @@ # https://github.com/so-fancy/diff-so-fancy#options [includeIf "gitdir:~/yggdrasil/"] - path = ~/.gitconfig_auth + path = ~/.gitconfig-auth [includeIf "gitdir:~/code/bitbucket/"] - path = ~/.gitconfig_auth + path = ~/.gitconfig-auth [includeIf "gitdir:~/code/bitfroest/"] - path = ~/.gitconfig_auth + path = ~/.gitconfig-auth [includeIf "gitdir:~/code/github/"] - path = ~/.gitconfig_auth + path = ~/.gitconfig-auth [includeIf "gitdir:~/code/gitlab/"] - path = ~/.gitconfig_auth + path = ~/.gitconfig-auth [includeIf "gitdir:~/code/incubator/"] - path = ~/.gitconfig_auth + path = ~/.gitconfig-auth [includeIf "gitdir:~/.igloo/"] - path = ~/.gitconfig_auth + path = ~/.gitconfig-auth [includeIf "gitdir:~/code/job/"] - path = ~/.gitconfig_auth_job + path = ~/.gitconfig-auth-job [core] repositoryFormatVersion = 0 diff --git a/snowblocks/git/gitconfig-auth-job.igloocrypt b/snowblocks/git/gitconfig-auth-job.igloocrypt new file mode 100644 index 0000000000000000000000000000000000000000..182d4174ed758574b8d0c31e58eafad4a7147d95 GIT binary patch literal 136 zcmV;30C)cYM@dveQdv+`0QcEGK;obMn}^1-HVbe&qe(Zil11R2s^y~rjE6kfe~<6Ho*5d;m7Xxzp`BaDsNV#JDUyXl!;J*+|CyZL2>9iJ2B1s qA~G~06ds4dXePKM4y{Z~rQt6$NSiK1>FwCox#~cuq;`opgd@?I7D8hH literal 0 HcmV?d00001 diff --git a/snowblocks/git/gitconfig-auth-svengreb.igloocrypt b/snowblocks/git/gitconfig-auth-svengreb.igloocrypt new file mode 100644 index 0000000000000000000000000000000000000000..dfc79dfbb8ca5ec3ead3d236c7797ccca30e97b4 GIT binary patch literal 139 zcmV;60CfKVM@dveQdv+`00cIg_96(=d2^uA=ka8}VL{yF^s`;K5v)lGNsp+Vh`A3z zmTBCAe1#K8cA5vPuof1A?{qZf`VMDxor82-Id&mX(gz%n0!4s`S4Vwui&Y4A&$w<8 tR91R?SwV8bVvT{mQA>1(?2%J6O|cU#$e^ATFgJq%1k#%xd@TcYx<<7sJE;Hw literal 0 HcmV?d00001 diff --git a/snowblocks/git/gitconfig-auth.igloocrypt b/snowblocks/git/gitconfig-auth.igloocrypt new file mode 100644 index 0000000000000000000000000000000000000000..c0fd67a56e7817750ae0b2f110136a46a5dd9281 GIT binary patch literal 155 zcmV;M0A&9FM@dveQdv+`08+HVLXb!ZdpoCVdJ-?-Hl`65WrTDzOir2fU)KP3`>c5m z7pOWP)K8^BPk;9i%s0p7KBD3XlaStBK2#+k3itleBNiM>Agp+llM5ZFtt~eO} J%Q=5PuRk{#MV$Zu literal 0 HcmV?d00001 diff --git a/snowblocks/git/snowblock.json b/snowblocks/git/snowblock.json index 3c62dfe..6099521 100644 --- a/snowblocks/git/snowblock.json +++ b/snowblocks/git/snowblock.json @@ -12,6 +12,24 @@ }, "~/.git-commit-msg": null, "~/.gitconfig": null, + "~/.gitconfig-auth": { + "hosts": { + "archbook": "gitconfig-auth", + "igloo": "gitconfig-auth" + } + }, + "~/.gitconfig-auth-svengreb": { + "hosts": { + "archbook": "gitconfig-auth-svengreb", + "igloo": "gitconfig-auth-svengreb" + } + }, + "~/.gitconfig-auth-job": { + "hosts": { + "archbook": "gitconfig-auth-job.igloocrypt", + "igloo": "gitconfig-auth-job.igloocrypt" + } + }, "~/.gitignore": null } } diff --git a/snowblocks/tilix/bookmarks-archbook.json.igloocrypt b/snowblocks/tilix/bookmarks-archbook.json.igloocrypt new file mode 100644 index 0000000000000000000000000000000000000000..c2a77250c67647b8682f9877967d0ffa4287e0fe GIT binary patch literal 1839 zcmV+~2hjKcM@dveQdv+`06?xs4k7VU;Z4S7e^xZshylF5JlGPYab8SgH>cL0EosJ6 zLb#)3%dxfrwJm@VUBGo!z0jdjp5L1lt&3Jpmkyn+@Bw5j!Fe7T8e`O6?@#tv$d0uM zD^hb8_!WH74oXvtv^YqfM~7=y;PnAkYMOCpw(W7|FwNptOP@VLjQmn9!LoW&7cUB5 zr%w@M+REZjn!vJ3l>%P=ApY=aOERyb*$8hHciF?jT%|cCf17J zw*|EFmGjuV$^>OD#U?iV1+r@hHbxpEvPjG9`i}# zGnsVZ47J8YT$tpvI|4KOTzHuMa9u=6^6m#;f;dE?L?-ydrWTxSe;8zOPdi?MEo zJ+lYK+l+Hu^h)^=SMfa2l~7o?!a;ba^UW4+x2@p9F-8KRX|9F4ufOK0QZX5h1o7=I z4plu)m1)WNtW_!Yv-H{T$u%jVEJH2)MbqZb$TqU`|(3OhlFoG1nyCpNTv)UX&2c} zr9;BAhCO|sSu;f!A$}Lr{Ctbvft@&?1_n4QS+>{fqK*(w+9*>%*)SvgC6c*6j6$zO zfUW~h*!KlilPo8f1;PPZ$gFq#n!zxWw`@4=C*%fKbg&+_(xt{H3I5 z6Pwm094(_0BPUH34b{Yge{cFQ1u}Nn(@C@~BGHTQzm`vk zp^Y8kcrEb8s!>7cm<;PN!OJ2(rI7z&R~M0)8jTovv*?V%dh?n!M62o0w zj__|Ay=(GR?nfjW)oA+RufQXXJaKKR;gj8V9Ky|`FAJTh8KS^TVs0Au6J&Dwqk|T` zZ5mn9JmWG4P%)xBhlLoA9;gL1oC#OG9Y(1ZRSmc$U#+4sT+ON4Yz4|h2gtKWmAvM_ zNiz-Bh)VfAHd8^X+;ea`R?B$aO$!tqw}kV<)n<^RQ_9MhS&Y9kjz`~i$s!-pD$fZ_ z@5*7e5SI#bZDhdofps5o5@Z^PQ1!qF(+jL7sy~rk z6#lJt4z@0zI~(YZVN+?rn@OB9_YdlaGm(qa63dPuhlVSf&1wwht=w_r!?tOemY-SB z;#OSBRo84FT>PyP6R3md4id4BB%7zHnuGj1$k392{a1Z zw#8{DC~f>YZ{Wc|IPzBl4E9bKaW=5sZ$cwo8VV57r{hT|X#XnVfL{2U5_Uj!3i+es dhFug}808IRU7MqCXelUo#ynNc);cUU1q(sFbM62D literal 0 HcmV?d00001 diff --git a/snowblocks/tilix/bookmarks-igloo.json.igloocrypt b/snowblocks/tilix/bookmarks-igloo.json.igloocrypt new file mode 100644 index 0000000000000000000000000000000000000000..bfc4d18954fbc1447c7f10dc95a4c190de92a752 GIT binary patch literal 1530 zcmV;#)mr@D8wNq-35_1UPm+aw-qevKzf{l1Bt#>%^IXz{s#z^!O{G?;t{=a^8rkPl>< zieQx_?9td^j5LO*9%8H~xcmod!SoXJZaI$&s1rg4cwxmYyp^iW)gnX&j7fgPrDz5q zH*!oWi5Kq#CoFG0tvda{d;*Dl!phorveh2$ZOsfsT7Q?H|LgljC#a`RgVsQu=r1!) zI6)Hvf6+aIK&&(W&Wc(Ml>s1vh;;j2LKKfe3QMa7ysi4}ie_GeN8Bk|QUDZ@BNzu< zZ>PmcYr~g{Wrf#bwJ)T&4pPUKP5ob!FVopj(T@xYpqxYB89?G z>4u&kStKP%g_$}lY4ma51i_P8+OVH8UfkBUAOIS-YqOe2^SFF1?Xo2E1F( z8O+yoRC%1VIX^Dl#7=iZ*dtvnO3M`8f?M7$T@!;smna$Gutat}NKb&<2Q;36{Kv^~ zF_;)1{q3w4-Ei>d>*01!xmehPHf&xaF&^ z9AO5MoZP4ry;YJQZmtKG9g-)SZ=g4w#d%<{SGZ(|;#uK~{{6|YD<@p7J>%qds>E1g z<{dK>4e70WiH|R!hL~8du=LCZJPU(Icm=q785%RIQgS5C{#8YdvU_R)RCHs}YQW)P z;?M!33-8Bh;l5jQf_%R7KU>jmde2~FYWRqLs(Kz`7e8ycX`oN4wjZFuOlQ^+y=dU1 zkQzp?ncG5@&Pf@2r3kmAwt={HXCkt;9rCq2F@lzzgud zx;d50v-rF1+eH9;pGTjQeGu?aIw~~uB z1C7P;4@q+wgPJ>%=-qTN>>gRNlZWI(r2r$B)W+G15{WWgL>-0bKfuTC(i+amn@jO+@9W@s>l6A=NnD#3;+NC literal 0 HcmV?d00001 diff --git a/snowblocks/tilix/snowblock.json b/snowblocks/tilix/snowblock.json index 0ca743b..6c87581 100644 --- a/snowblocks/tilix/snowblock.json +++ b/snowblocks/tilix/snowblock.json @@ -1,5 +1,16 @@ [ { "clean": ["~/.config/tilix"] + }, + { + "link": { + "~/.config/tilix/bookmarks.json": { + "create": true, + "hosts": { + "archbook": "bookmarks-archbook.json.igloocrypt", + "igloo": "bookmarks-igloo.json.igloocrypt" + } + } + } } ] diff --git a/snowblocks/xdg/gtk-3.0/bookmarks-archbook.igloocrypt b/snowblocks/xdg/gtk-3.0/bookmarks-archbook.igloocrypt new file mode 100644 index 0000000000000000000000000000000000000000..fb6bf3b82a870424e19d95a713cde6977098b67c GIT binary patch literal 328 zcmV-O0k{4DM@dveQdv+`0DHJl=hUImfAkM~mW>J_#Eh*(aW0~;Hr~N4hWTQ~eg}1- zkCh4Z`Yx%KVgbA#50VABM_Q;Dnt$dF-=U~VOgPAtS!WmS$TH3eTtV%LRhYO5{o#)M z2{L2vJ<&ywP^5ss0-X7ri6BG<^>ikazY)FG63JZ6tUbC|b>7`W^!$1kz?Osx@`=7Y z0%gbUZpqhiSpu0$&gUp^e1vo*L9Dm6XP}F+bpJ<~k4l{7M=PQIR~qMtm(--i%nelZ zeUG|(AX@!Mz0PizQpqh@%OI=l3BtxFzcSny`Ip0TWfshKrR$FkPgIXG&(&%RCyoxl zo|Fbp34(=NnzLj?HvsM+o$wdC&5uC7ed%Z#lKM!_Un5b_#H_3Ifza4&`H!Qe(>QkZl`a#zsN@AacJu_Q!VRKF~q~f_hozGoWL58*WMib zL2G|OmR%92)eIgEQ8ib)o;VbM)8@VPM#NStQ3e-#Ja<&)a0SOCf#0FPo@Wft&3N4p zJI`GRI7@k5xM_mfD#EDZ|PTBkm-Y>C@AN zu^yKSU#2HK7kRf+gWAfKRkQ2IPw)kM4NA3hJ6c@j(16P`tu!$gNvQhZ$7aZP&N+T} z<4aiXNoe*WJt+xb@DD+w`Q3OasHp8d#mQMiHl>%Y2(U6>74Iwg)dJb&1zAHll&GP$ zzxQjqNXO~dIAP>-iE~>FPqBC3ZIWO|C4213;u@iKg7+A_w8n%f*tO~%Az6TBG_Eu%MZdFZ9_2$ka1r!7f6K;5x-U>BDl6b<_4O2- MP=jc*S?#9p6M5##DgXcg literal 0 HcmV?d00001 diff --git a/snowblocks/xdg/snowblock.json b/snowblocks/xdg/snowblock.json index 6bb4347..7bd798b 100644 --- a/snowblocks/xdg/snowblock.json +++ b/snowblocks/xdg/snowblock.json @@ -18,6 +18,14 @@ "~/.config/user-dirs.locale": { "force": true }, + "~/.config/gtk-3.0/bookmarks": { + "create": true, + "force": true, + "hosts": { + "archbook": "gtk-3.0/bookmarks-archbook.igloocrypt", + "igloo": "gtk-3.0/bookmarks-igloo.igloocrypt" + } + }, "~/.local/share/applications/atom.desktop": { "create": true, "force": true, From dc4d22d6c6cb99a3e0f745c6b7dbdee0c75332a9 Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Sat, 8 Sep 2018 20:24:50 +0200 Subject: [PATCH 107/214] Set color profile to sRGB MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Atom 1.28 introduced support for custom ICC color profiles (1) based on the upgrade to Electron 2.x which in turn is based on the latest Chrome version. This version includes changes to the color rendering and now respects the color profile configured in the OS settings. Due to this change for many users the [colors appear to be pale (2). To bring back the previous (more stronger) color rendering Atoms „Core“ → „Color Profile“ must be changed from „Use color profile configured in the operating system“ to „Use sRGB color profile“. References: (1) http://blog.atom.io/2018/06/21/atom-1-28.html#support-for-custom-color-profiles (2) https://github.com/atom/atom/issues/17356 Closes GH-115 --- snowblocks/atom/config.cson | 1 + 1 file changed, 1 insertion(+) diff --git a/snowblocks/atom/config.cson b/snowblocks/atom/config.cson index a205dfb..45a2a09 100644 --- a/snowblocks/atom/config.cson +++ b/snowblocks/atom/config.cson @@ -43,6 +43,7 @@ autoHideMenuBar: true automaticallyUpdate: false closeEmptyWindows: false + colorProfile: "srgb" disabledPackages: [ "exception-reporting" "metrics" From 6cb11653e71df494cd8293a68fdb9f4775210b75 Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Sat, 8 Sep 2018 20:32:24 +0200 Subject: [PATCH 108/214] Fix invalid file symlink targets for Git auth configurations The Git authentication configurations got recently updated to be encrypted. The targets for the symlinks configured within the `snowblock.json` have not been updated to match this change. Closes GH-116 --- snowblocks/git/snowblock.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/snowblocks/git/snowblock.json b/snowblocks/git/snowblock.json index 6099521..295f264 100644 --- a/snowblocks/git/snowblock.json +++ b/snowblocks/git/snowblock.json @@ -14,14 +14,14 @@ "~/.gitconfig": null, "~/.gitconfig-auth": { "hosts": { - "archbook": "gitconfig-auth", - "igloo": "gitconfig-auth" + "archbook": "gitconfig-auth.igloocrypt", + "igloo": "gitconfig-auth.igloocrypt" } }, "~/.gitconfig-auth-svengreb": { "hosts": { - "archbook": "gitconfig-auth-svengreb", - "igloo": "gitconfig-auth-svengreb" + "archbook": "gitconfig-auth-svengreb.igloocrypt", + "igloo": "gitconfig-auth-svengreb.igloocrypt" } }, "~/.gitconfig-auth-job": { From 8d013adcb6529977338165ad2a064f087a867672 Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Sat, 8 Sep 2018 20:47:48 +0200 Subject: [PATCH 109/214] Allow more than active task The default Taskwarrior limit of active tasks is one. However, there are many use cases where multiple active tasks must be used, e.g. when working on an GitHub issue and the associated PR which are both handled in separate tasks or when working on tasks that are dependent on other tasks. The limited has been increased to allow to use Taskwarrior for such use cases without having to deal with limitation errors. Closes GH-117 --- snowblocks/taskwarrior/taskrc | 1 + 1 file changed, 1 insertion(+) diff --git a/snowblocks/taskwarrior/taskrc b/snowblocks/taskwarrior/taskrc index 1226803..2959116 100644 --- a/snowblocks/taskwarrior/taskrc +++ b/snowblocks/taskwarrior/taskrc @@ -21,6 +21,7 @@ default.command=stat editor=vim list.all.projects=true list.all.tags=true +max_active_tasks=20 regex=true weekstart=Monday From f2dffb765ced938df9a6d16c1219dadd86f0330b Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Sun, 9 Sep 2018 09:24:39 +0200 Subject: [PATCH 110/214] Update and remove obsolete application desktop files Some XDG application `.desktop` files are not required anymore because the latest upstream versions have been adapted and improved to match the custom configurations: >> JetBrain Products * "JetBrains IntelliJ IDEA Ultimate Edition" (1) binary `/opt/intellij-idea-ultimate-edition/bin/idea.sh` is now linked to `/usr/bin/idea` and `/usr/bin/intellij-idea-ultimate-edition`. The desktop file is now named uniform `/usr/share/applications/jetbrains-idea.desktop`. * "JetBrains IntelliJ IDEA Community Edition" (2) binary `/opt/intellij-idea-community-edition/bin/idea.sh` is now linked to `/usr/bin/idea`. The desktop file is now named uniform `/usr/share/applications/jetbrains-idea.desktop`. * "JetBrains Webstorm" (3) binary `/opt/webstorm/bin/webstorm.sh` is now linked to `/usr/bin/webstorm` and the desktop file is now named uniform `/usr/share/applications/jetbrains-webstorm.desktop`. * "JetBrains Pycharm Community Edition" (4) binary `/opt/pycharm-community-edition/bin/pycharm.sh` is now linked to `/usr/bin/pycharm`, bu the desktop file is still named `/usr/share/applications/pycharm.desktop`. >> Atom * "Atom 1.28" (5) included an upgrade to Electron 2.0 and now ships with an standalone launcher(`/usr/lib/atom/atom`) instead of using the Electron binary (`electron `). References: (1) https://aur.archlinux.org/cgit/aur.git/tree/jetbrains-idea.desktop?h=intellij-idea-ultimate-edition (2) https://git.archlinux.org/svntogit/community.git/tree/trunk/idea.desktop?h=packages/intellij-idea-community-edition (3) https://aur.archlinux.org/cgit/aur.git/tree/jetbrains-webstorm.desktop?h=webstorm (4) https://git.archlinux.org/svntogit/community.git/tree/trunk/pycharm.desktop?h=packages/pycharm-community-edition (5) http://blog.atom.io/2018/06/21/atom-1-28.html#electron-upgrade Closes GH-118 --- .../archbook/intellij-idea-u.dockitem | 2 -- .../archbook/jetbrains-idea.dockitem | 2 ++ .../archbook/pycharm-community.dockitem | 2 -- .../plank/launchers/archbook/pycharm.dockitem | 2 ++ .../launchers/archbook/webstorm.dockitem | 2 -- .../launchers/igloo/intellij-idea-u.dockitem | 2 -- .../launchers/igloo/jetbrains-idea.dockitem | 2 ++ .../igloo/pycharm-community.dockitem | 2 -- .../plank/launchers/igloo/pycharm.dockitem | 2 ++ .../plank/launchers/igloo/webstorm.dockitem | 2 -- snowblocks/xdg/applications/atom.desktop | 4 ++-- .../xdg/applications/intellij-idea-ce.desktop | 5 ----- .../xdg/applications/intellij-idea-u.desktop | 5 ----- .../applications/pycharm-community.desktop | 5 ----- snowblocks/xdg/applications/webstorm.desktop | 5 ----- snowblocks/xdg/snowblock.json | 20 ------------------- 16 files changed, 10 insertions(+), 54 deletions(-) delete mode 100644 snowblocks/plank/launchers/archbook/intellij-idea-u.dockitem create mode 100644 snowblocks/plank/launchers/archbook/jetbrains-idea.dockitem delete mode 100644 snowblocks/plank/launchers/archbook/pycharm-community.dockitem create mode 100644 snowblocks/plank/launchers/archbook/pycharm.dockitem delete mode 100644 snowblocks/plank/launchers/archbook/webstorm.dockitem delete mode 100644 snowblocks/plank/launchers/igloo/intellij-idea-u.dockitem create mode 100644 snowblocks/plank/launchers/igloo/jetbrains-idea.dockitem delete mode 100644 snowblocks/plank/launchers/igloo/pycharm-community.dockitem create mode 100644 snowblocks/plank/launchers/igloo/pycharm.dockitem delete mode 100644 snowblocks/plank/launchers/igloo/webstorm.dockitem delete mode 100644 snowblocks/xdg/applications/intellij-idea-ce.desktop delete mode 100644 snowblocks/xdg/applications/intellij-idea-u.desktop delete mode 100644 snowblocks/xdg/applications/pycharm-community.desktop delete mode 100644 snowblocks/xdg/applications/webstorm.desktop diff --git a/snowblocks/plank/launchers/archbook/intellij-idea-u.dockitem b/snowblocks/plank/launchers/archbook/intellij-idea-u.dockitem deleted file mode 100644 index 54f08a8..0000000 --- a/snowblocks/plank/launchers/archbook/intellij-idea-u.dockitem +++ /dev/null @@ -1,2 +0,0 @@ -[PlankDockItemPreferences] -Launcher=file:///home/sgreb/.local/share/applications/intellij-idea-u.desktop diff --git a/snowblocks/plank/launchers/archbook/jetbrains-idea.dockitem b/snowblocks/plank/launchers/archbook/jetbrains-idea.dockitem new file mode 100644 index 0000000..21126b5 --- /dev/null +++ b/snowblocks/plank/launchers/archbook/jetbrains-idea.dockitem @@ -0,0 +1,2 @@ +[PlankDockItemPreferences] +Launcher=file:///usr/share/applications/jetbrains-idea.desktop diff --git a/snowblocks/plank/launchers/archbook/pycharm-community.dockitem b/snowblocks/plank/launchers/archbook/pycharm-community.dockitem deleted file mode 100644 index 4ca2a94..0000000 --- a/snowblocks/plank/launchers/archbook/pycharm-community.dockitem +++ /dev/null @@ -1,2 +0,0 @@ -[PlankDockItemPreferences] -Launcher=file:///home/sgreb/.local/share/applications/pycharm-community.desktop diff --git a/snowblocks/plank/launchers/archbook/pycharm.dockitem b/snowblocks/plank/launchers/archbook/pycharm.dockitem new file mode 100644 index 0000000..84149c3 --- /dev/null +++ b/snowblocks/plank/launchers/archbook/pycharm.dockitem @@ -0,0 +1,2 @@ +[PlankDockItemPreferences] +Launcher=file:///usr/share/applications/pycharm.desktop diff --git a/snowblocks/plank/launchers/archbook/webstorm.dockitem b/snowblocks/plank/launchers/archbook/webstorm.dockitem deleted file mode 100644 index 5c0516f..0000000 --- a/snowblocks/plank/launchers/archbook/webstorm.dockitem +++ /dev/null @@ -1,2 +0,0 @@ -[PlankDockItemPreferences] -Launcher=file:///home/sgreb/.local/share/applications/webstorm.desktop diff --git a/snowblocks/plank/launchers/igloo/intellij-idea-u.dockitem b/snowblocks/plank/launchers/igloo/intellij-idea-u.dockitem deleted file mode 100644 index 7d6fe14..0000000 --- a/snowblocks/plank/launchers/igloo/intellij-idea-u.dockitem +++ /dev/null @@ -1,2 +0,0 @@ -[PlankDockItemPreferences] -Launcher=file:///home/arcticicestudio/.local/share/applications/intellij-idea-u.desktop diff --git a/snowblocks/plank/launchers/igloo/jetbrains-idea.dockitem b/snowblocks/plank/launchers/igloo/jetbrains-idea.dockitem new file mode 100644 index 0000000..21126b5 --- /dev/null +++ b/snowblocks/plank/launchers/igloo/jetbrains-idea.dockitem @@ -0,0 +1,2 @@ +[PlankDockItemPreferences] +Launcher=file:///usr/share/applications/jetbrains-idea.desktop diff --git a/snowblocks/plank/launchers/igloo/pycharm-community.dockitem b/snowblocks/plank/launchers/igloo/pycharm-community.dockitem deleted file mode 100644 index 5404360..0000000 --- a/snowblocks/plank/launchers/igloo/pycharm-community.dockitem +++ /dev/null @@ -1,2 +0,0 @@ -[PlankDockItemPreferences] -Launcher=file:///home/arcticicestudio/.local/share/applications/pycharm-community.desktop diff --git a/snowblocks/plank/launchers/igloo/pycharm.dockitem b/snowblocks/plank/launchers/igloo/pycharm.dockitem new file mode 100644 index 0000000..84149c3 --- /dev/null +++ b/snowblocks/plank/launchers/igloo/pycharm.dockitem @@ -0,0 +1,2 @@ +[PlankDockItemPreferences] +Launcher=file:///usr/share/applications/pycharm.desktop diff --git a/snowblocks/plank/launchers/igloo/webstorm.dockitem b/snowblocks/plank/launchers/igloo/webstorm.dockitem deleted file mode 100644 index 5c5f5f0..0000000 --- a/snowblocks/plank/launchers/igloo/webstorm.dockitem +++ /dev/null @@ -1,2 +0,0 @@ -[PlankDockItemPreferences] -Launcher=file:///home/arcticicestudio/.local/share/applications/webstorm.desktop diff --git a/snowblocks/xdg/applications/atom.desktop b/snowblocks/xdg/applications/atom.desktop index 049526b..c57d01d 100644 --- a/snowblocks/xdg/applications/atom.desktop +++ b/snowblocks/xdg/applications/atom.desktop @@ -2,9 +2,9 @@ Type=Application Name=Atom Icon=atom -Exec=electron --app=/usr/lib/atom %F +Exec=/usr/lib/atom/atom %F StartupNotify=true -MimeType=text/plain;text/css;text/java;text/md;text/markupdescription;text/readme;text/h;text/c;text/cpp;text/cp;text/js;text/xml;text/schema;text/x-sass;text/x-less; +MimeType=text/plain;text/css;text/java;text/md;text/markupdescription;text/readme;text/h;text/c;text/cpp;text/cp;text/js;text/xml;text/schema;text/x-sass;text/x-less;text/markdown; Actions=dev-mode; [Desktop Action dev-mode] diff --git a/snowblocks/xdg/applications/intellij-idea-ce.desktop b/snowblocks/xdg/applications/intellij-idea-ce.desktop deleted file mode 100644 index 40933f1..0000000 --- a/snowblocks/xdg/applications/intellij-idea-ce.desktop +++ /dev/null @@ -1,5 +0,0 @@ -[Desktop Entry] -Type=Application -Name=IntelliJ IDEA Community Edition -Icon=intellij-idea-ce -Exec=/opt/intellij-idea-ce/bin/idea.sh diff --git a/snowblocks/xdg/applications/intellij-idea-u.desktop b/snowblocks/xdg/applications/intellij-idea-u.desktop deleted file mode 100644 index 6ea8b4e..0000000 --- a/snowblocks/xdg/applications/intellij-idea-u.desktop +++ /dev/null @@ -1,5 +0,0 @@ -[Desktop Entry] -Type=Application -Name=IntelliJ IDEA Ultimate -Icon=intellij-idea -Exec=/opt/intellij-idea-u/bin/idea.sh diff --git a/snowblocks/xdg/applications/pycharm-community.desktop b/snowblocks/xdg/applications/pycharm-community.desktop deleted file mode 100644 index c43f5fb..0000000 --- a/snowblocks/xdg/applications/pycharm-community.desktop +++ /dev/null @@ -1,5 +0,0 @@ -[Desktop Entry] -Type=Application -Name=PyCharm Community -Icon=pycharm -Exec=/opt/pycharm-community/bin/pycharm.sh diff --git a/snowblocks/xdg/applications/webstorm.desktop b/snowblocks/xdg/applications/webstorm.desktop deleted file mode 100644 index 3f5e553..0000000 --- a/snowblocks/xdg/applications/webstorm.desktop +++ /dev/null @@ -1,5 +0,0 @@ -[Desktop Entry] -Type=Application -Name=WebStorm -Icon=webstorm -Exec=/opt/webstorm/bin/webstorm.sh diff --git a/snowblocks/xdg/snowblock.json b/snowblocks/xdg/snowblock.json index 7bd798b..2a2852e 100644 --- a/snowblocks/xdg/snowblock.json +++ b/snowblocks/xdg/snowblock.json @@ -46,16 +46,6 @@ "force": true, "path": "applications/gtkhash.desktop" }, - "~/.local/share/applications/intellij-idea-ce.desktop": { - "create": true, - "force": true, - "path": "applications/intellij-idea-ce.desktop" - }, - "~/.local/share/applications/intellij-idea-u.desktop": { - "create": true, - "force": true, - "path": "applications/intellij-idea-u.desktop" - }, "~/.local/share/applications/minecraft.desktop": { "create": true, "force": true, @@ -71,21 +61,11 @@ "force": true, "path": "applications/org.gnome.Screenshot.desktop" }, - "~/.local/share/applications/pycharm-community.desktop": { - "create": true, - "force": true, - "path": "applications/pycharm-community.desktop" - }, "~/.local/share/applications/shotwell-viewer.desktop": { "create": true, "force": true, "path": "applications/shotwell-viewer.desktop" }, - "~/.local/share/applications/webstorm.desktop": { - "create": true, - "force": true, - "path": "applications/webstorm.desktop" - }, "~/.config/autostart/dropbox.desktop": { "create": true, "force": true, From 962bc284b0eb335ba5030ad76fc05bace14880d0 Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Sun, 9 Sep 2018 09:32:41 +0200 Subject: [PATCH 111/214] Update and extend bookmarks Updated some paths of bookmarks that are not up-to-date and added some that were missing. Closes GH-119 --- .../tilix/bookmarks-archbook.json.igloocrypt | Bin 1839 -> 2344 bytes .../tilix/bookmarks-igloo.json.igloocrypt | Bin 1530 -> 2042 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/snowblocks/tilix/bookmarks-archbook.json.igloocrypt b/snowblocks/tilix/bookmarks-archbook.json.igloocrypt index c2a77250c67647b8682f9877967d0ffa4287e0fe..29b6af04786d9e1844d42961599e69a8617fa82e 100644 GIT binary patch literal 2344 zcmV+@3D@=jM@dveQdv+`0MdHZ1+BWp9z7E1nu2#PMg0tUeLwzYw&IraYrC9iqB?X5 zkfDVDCjGxI0;PQ9_-8YTje8qX{r$Y;Uo;j{F<9JRLdnV~cM*{wQv*#r zIK~W4Mk!MxWMg2%Va#yOp>IA4-aX{$)=-abz{LsW1is+#JfjYe)wX#*kwopqnSeI$ zKnr8qAHlP`1*k5;ZpttCI1F0$t_4Zs6|Jb8{jf@nR(|=NJWh(BQFhftAw0-(UYRXe zb_pppc3U!rc*JKmyF8QpHtS-4o|>OwcGj*}5Pv#%^nY3B5s_+pgf$m37J>|_NJ>-( zl-a6?L=QIy42*-EAme||NVX~vip^^^b2k;#NlN-{wX-dj%OUY8aL+v?{amiL%bkGb z_^Wyho{FNF^znL&g)ZUZxj)8r`%bYf!l=4+eOd)_7k>?=-vE31eJWZ@vrRWg4H?%m z8e&g1^3rCA5C-V)s3?1!5a&d{#{g(T^5b7flHhq7m3Js#sIFs)MNb7-Cg(q-CG1XT z&v+L($4=zFlu+T(VW zXgfHR0-x{C4v{3bu(5#_IK{DKnW!w3wO|-wN;3GYA_g)oOHg}V${n**<`=S~cJ~?L z_ef3C6!$7wT!>|?sF1WahpgYnOT5?zyn>XuOaKv{4Wm$^FXw9QDXAQ@rOrU-SVX~T zH1i|YzRG|1JCP&AU+zH*PWzt{DC^G$kd#D!Ed10-g18E4sCu>3?W+^qJ#dofWx+X3 zU_CK)85tt1Vy$}YnO2D~CONE7WHyD!dHbUqRSNpRw96ju2>#p}dkv86jO>$R*vNxd z)qjHOXf+a^PFGY^L5V0t!!YdGJ+F>k)xfdcRQRoD*&hGS?_^1Hh3Y3aTam2tgCbq{Wv zj97$kxCH;ZTPRLuhp_FqVm9t(&DMGubt-22ku*5q?MH|$JsHDMiG^tJ3rwCZt&3#1 zWVK%ee423~Wu>QfPF|k~&iBj0=0#6xLyw~pFEKItaX)N7EO2TqAVpL1(MB|RVfH!E zg1TLzI?V?@W=x+HZggp?;X0(RuGTuodsxcwDj#n7L;h=Pb$4T z&GgU<>s`8}Cg{h?Y4bt|gu~ceV>Wu^I z8xX7K0C}$;K}R-`xZY9*HUQrBYle2fQC$j^!U~__!)ej-@Pb~$7jpIo5!on;+e>XB zR48o25|WV(UxPfKeekFyD)_f`?>FOgo{;#e60BUsTs!v=Nr>P5qN5-+kt*R$+g*PX>#oiTt}>pxqAOquzs z1M;*5emy2r>c27@b)45tgOI9|5~D)S1Mg!T76hmNkrL_gCD@W61>aYLL{iADem)K( zc`ICnHAzj~tYg1vwPhtfyFPjFAY%H^X`$VTQ}Z&5;I`iTZ@f|hMv;iQ`|LN(I&#6-jut1H$x*< zS7rr;)`4HFbVRl^Hnr%33I3B?AMswZsVf$mx?ioM|Ggg%KM6IAFmFTEou=W(bqp?08lZG&u^fTsn$<06#|o2G#X zAIal5oOn!`|C&*B1qGqJbahZ4O={yC0Zxj34Q(^ZRZprxnHl2E)XItk4$~q+%;?gV z*W*aUCG#k0O?bTRa zE~%)%v4nj3ta|#jho;*mK(e literal 1839 zcmV+~2hjKcM@dveQdv+`06?xs4k7VU;Z4S7e^xZshylF5JlGPYab8SgH>cL0EosJ6 zLb#)3%dxfrwJm@VUBGo!z0jdjp5L1lt&3Jpmkyn+@Bw5j!Fe7T8e`O6?@#tv$d0uM zD^hb8_!WH74oXvtv^YqfM~7=y;PnAkYMOCpw(W7|FwNptOP@VLjQmn9!LoW&7cUB5 zr%w@M+REZjn!vJ3l>%P=ApY=aOERyb*$8hHciF?jT%|cCf17J zw*|EFmGjuV$^>OD#U?iV1+r@hHbxpEvPjG9`i}# zGnsVZ47J8YT$tpvI|4KOTzHuMa9u=6^6m#;f;dE?L?-ydrWTxSe;8zOPdi?MEo zJ+lYK+l+Hu^h)^=SMfa2l~7o?!a;ba^UW4+x2@p9F-8KRX|9F4ufOK0QZX5h1o7=I z4plu)m1)WNtW_!Yv-H{T$u%jVEJH2)MbqZb$TqU`|(3OhlFoG1nyCpNTv)UX&2c} zr9;BAhCO|sSu;f!A$}Lr{Ctbvft@&?1_n4QS+>{fqK*(w+9*>%*)SvgC6c*6j6$zO zfUW~h*!KlilPo8f1;PPZ$gFq#n!zxWw`@4=C*%fKbg&+_(xt{H3I5 z6Pwm094(_0BPUH34b{Yge{cFQ1u}Nn(@C@~BGHTQzm`vk zp^Y8kcrEb8s!>7cm<;PN!OJ2(rI7z&R~M0)8jTovv*?V%dh?n!M62o0w zj__|Ay=(GR?nfjW)oA+RufQXXJaKKR;gj8V9Ky|`FAJTh8KS^TVs0Au6J&Dwqk|T` zZ5mn9JmWG4P%)xBhlLoA9;gL1oC#OG9Y(1ZRSmc$U#+4sT+ON4Yz4|h2gtKWmAvM_ zNiz-Bh)VfAHd8^X+;ea`R?B$aO$!tqw}kV<)n<^RQ_9MhS&Y9kjz`~i$s!-pD$fZ_ z@5*7e5SI#bZDhdofps5o5@Z^PQ1!qF(+jL7sy~rk z6#lJt4z@0zI~(YZVN+?rn@OB9_YdlaGm(qa63dPuhlVSf&1wwht=w_r!?tOemY-SB z;#OSBRo84FT>PyP6R3md4id4BB%7zHnuGj1$k392{a1Z zw#8{DC~f>YZ{Wc|IPzBl4E9bKaW=5sZ$cwo8VV57r{hT|X#XnVfL{2U5_Uj!3i+es dhFug}808IRU7MqCXelUo#ynNc);cUU1q(sFbM62D diff --git a/snowblocks/tilix/bookmarks-igloo.json.igloocrypt b/snowblocks/tilix/bookmarks-igloo.json.igloocrypt index bfc4d18954fbc1447c7f10dc95a4c190de92a752..3a9231b1688edeb48bb6361e0c501b9c64c947cb 100644 GIT binary patch literal 2042 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 From 36970049e36f2e1671a03bdf1cf507b19d88da28 Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Sun, 9 Sep 2018 09:33:57 +0200 Subject: [PATCH 112/214] Add new conditional auth config include To ensure all _communikey_ projects require are configured to use the `svengreb` Git user a new conditional include for the `~/code/github/repositories/communicode/` path must be added. Closes GH-120 --- snowblocks/git/gitconfig | 3 +++ 1 file changed, 3 insertions(+) diff --git a/snowblocks/git/gitconfig b/snowblocks/git/gitconfig index b919c2d..3de0f3a 100755 --- a/snowblocks/git/gitconfig +++ b/snowblocks/git/gitconfig @@ -22,6 +22,9 @@ [includeIf "gitdir:~/code/github/"] path = ~/.gitconfig-auth +[includeIf "gitdir:~/code/github/repositories/communicode/"] + path = ~/.gitconfig-auth-svengreb + [includeIf "gitdir:~/code/gitlab/"] path = ~/.gitconfig-auth From 11ca431953b73c32a42daecee4cc22866a067e0c Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Sun, 9 Sep 2018 09:35:56 +0200 Subject: [PATCH 113/214] Add package "language-rust" for Rust support Add support for Rust (1) via the community package "language-rust" (2). References: (1) https://www.rust-lang.org (2) https://atom.io/packages/language-rust Closes GH-121 --- snowblocks/atom/packages.cson | 1 + 1 file changed, 1 insertion(+) diff --git a/snowblocks/atom/packages.cson b/snowblocks/atom/packages.cson index 572e8cd..e360cd8 100644 --- a/snowblocks/atom/packages.cson +++ b/snowblocks/atom/packages.cson @@ -21,6 +21,7 @@ packages: [ "language-docker" "language-generic-config" "language-groovy" + "language-rust" "language-systemd" "language-viml" "linter" From bb19634544f91c26d66e1f7f53a6bf06210fbaaf Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Sun, 9 Sep 2018 09:37:43 +0200 Subject: [PATCH 114/214] Add new Atom project paths Added groups for the new project paths * "communikey": `~/code/github/repositories/communicode/*` * "NPM": `~/yggdrasil/npm/*` * "snowsaw": `~/yggdrasil/snowsaw` Closes GH-122 --- snowblocks/atom/project-folder.cson | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/snowblocks/atom/project-folder.cson b/snowblocks/atom/project-folder.cson index 79a6f7a..2e7a300 100644 --- a/snowblocks/atom/project-folder.cson +++ b/snowblocks/atom/project-folder.cson @@ -19,6 +19,11 @@ groups: "~/yggdrasil/aur/nord-vim-lightline" "~/yggdrasil/aur/nord-xfce-terminal" ] + "communikey": [ + "~/code/github/repositories/communicode/communikey-backend" + "~/code/github/repositories/communicode/communikey-docs" + "~/code/github/repositories/communicode/communikey-frontend" + ] "IceCore": [ "~/yggdrasil/icecore/icecore-hashids" "~/yggdrasil/icecore/icecore-json" @@ -93,12 +98,19 @@ groups: "~/yggdrasil/northem/northem/northem-light-notepadplusplus-syntax" "~/yggdrasil/northem/northem/northem-notepadplusplus-syntax" ] + "NPM": [ + "~/yggdrasil/npm/gitstick" + "~/yggdrasil/npm/styled-modern-normalize" + ] "scratchpad": [ "~/documents/scratchpad" ] "snippetbox": [ "~/code/snippetbox" ] + "snowsaw": [ + "~/yggdrasil/snowsaw" + ] "styleguide": [ "~/yggdrasil/styleguide/eslint-config-arcticicestudio" "~/yggdrasil/styleguide/eslint-config-arcticicestudio-base" From 535cb0a6ac6f82f88c1e3b585fba25be001adebb Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Sun, 9 Sep 2018 16:33:35 +0200 Subject: [PATCH 115/214] Temporary replace "diff-so-fancy" with bundled "diff-highlight" Related to so-fancy/diff-so-fancy#35 and so-fancy/diff-so-fancy#296. The reason are incompatibility problems of "diff-so-fancy" (1) with the latest Git versions caused by changes in the diff logic. ```raw fatal: mismatched output from interactive.diffFilter hint: Your filter must maintain a one-to-one correspondence hint: between its input and output lines. ``` See so-fancy/diff-so-fancy#35 and so-fancy/diff-so-fancy#296 for details. Note that downgrading to a compatible Git version is not an option because versions <2.17.1 are effected by CVE-2018-11233 and and 11235 (2). To fix this problem for interactive patch mode (3) the filter will temporary be changed to the official diff-highlight (4) tool bundled with Git. ```diff [interactive] - diffFilter = diff-so-fancy + diffFilter = diff-highlight ``` References: (1) https://github.com/so-fancy/diff-so-fancy (2) https://github.com/git/git/blob/master/Documentation/RelNotes/2.17.1.txt#L7-L10 (3) https://github.com/arcticicestudio/igloo/blob/bb19634544f91c26d66e1f7f53a6bf06210fbaaf/snowblocks/git/gitconfig#L214-L220 (4) https://github.com/git/git/tree/master/contrib/diff-highlight Closes GH-125 --- snowblocks/git/gitconfig | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/snowblocks/git/gitconfig b/snowblocks/git/gitconfig index 3de0f3a..55479c9 100755 --- a/snowblocks/git/gitconfig +++ b/snowblocks/git/gitconfig @@ -44,7 +44,7 @@ logallrefupdates = true whitespace = tab-in-indent editor = vim - pager = diff-so-fancy | less --tabs=4 -RFX + pager = diff-so-fancy | less --tabs=2 -RFX attributesfile = ~/.gitattributes excludesfile = ~/.gitignore autocrlf = input @@ -68,7 +68,21 @@ useUnicodeRuler = true [interactive] - diffFilter = diff-so-fancy + # Temporary replaced "diff-so-fancy" with bundled "diff-highlight". + # + # The reason are incompatibility problems of "diff-so-fancy" with the latest Git versions caused by changes in the + # diff logic. + # See "so-fancy/diff-so-fancy#35" and "so-fancy/diff-so-fancy#296" for details. + # + # Note that downgrading to a compatible Git version is not an option because versions <2.17.1 are effected by + # CVE-2018-11233 and and 11235. + # See https://github.com/git/git/blob/master/Documentation/RelNotes/2.17.1.txt#L7-L10 for details. + # + # To fix this problem for interactive patch mode the filter has been temporary changed to the official + # "diff-highlight" tool bundled with Git. + # See https://github.com/git/git/tree/master/contrib/diff-highlight for details. + #diffFilter = diff-so-fancy + diffFilter = diff-highlight [merge] tool = intellij From 7554efce27a00b43052fa3ec5b8e187a44d5bd5b Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Sun, 9 Sep 2018 17:54:44 +0200 Subject: [PATCH 116/214] Include default package config keys The config keys that are currently initialized with the default value are not added to user's `~/.atom/config.cson`. To ensure the same Atom setup even when some default values are changed these are now included in the `config.cson`. This includes keys for all core and community packages. Closes GH-124 --- snowblocks/atom/config.cson | 203 +++++++++++++++++++++++++++++++++++- 1 file changed, 201 insertions(+), 2 deletions(-) diff --git a/snowblocks/atom/config.cson b/snowblocks/atom/config.cson index 45a2a09..fe9142a 100644 --- a/snowblocks/atom/config.cson +++ b/snowblocks/atom/config.cson @@ -31,12 +31,34 @@ ui: panelContrast: true panelShadows: true + "autocomplete-plus": + backspaceTriggersAutocomplete: false + confirmCompletion: "tab and enter" + consumeSuffix: true + enableAutoActivation: true + enableAutoConfirmSingleSuggestion: true + enableBuiltinProvider: true + enableExtendedUnicodeSupport: false + includeCompletionsFromAllBuffers: true + similarSuggestionRemoval: "none" + strictMatching: false + useAlternateScoring: true + useCoreMovementCommands: true + useLocalityBonus: true + "bracket-matcher": + alwaysSkipClosingPairs: true + autocompleteBrackets: true + highlightMatchingLineNumber: true + wrapSelectionsInBrackets: true "color-picker": abbreviateValues: true preferredFormat: "HEX" + randomColor: false + triggerKey: "C" uppercaseColorValues: true "command-palette": preserveLastSearch: true + useAlternateScoring: true core: allowPendingPaneItems: false audioBeep: false @@ -44,6 +66,7 @@ automaticallyUpdate: false closeEmptyWindows: false colorProfile: "srgb" + destroyEmptyPanes: true disabledPackages: [ "exception-reporting" "metrics" @@ -51,49 +74,179 @@ "symbols-view" "github" ] + excludeVcsIgnoredPaths: true + fileEncoding: "utf8" + fileSystemWatcher: "native" + followSymlinks: true openEmptyEditorOnStart: false + reopenProjectMenuCount: 0 + restorePreviousWindowsOnStart: "always" telemetryConsent: "no" themes: [ "nord-atom-ui" "nord-atom-syntax" ] useProxySettingsWhenCallingApm: false + useTreeSitterParsers: false docblockr: + align_tags: "deep" + auto_add_method_tag: true c_style_block_comments: true + deep_indent: false + extend_double_slash: true + param_description: true + return_description: true spacer_between_sections: "after_description" editor: + atomicSoftTabs: true + autoIndent: true + autoIndentOnPaste: true + confirmCheckoutHeadRevision: true fontFamily: "Source Code Pro Medium" fontSize: 22 preferredLineLength: 120 scrollPastEnd: true + showCursorOnSelection: true + showIndentGuide: false showInvisibles: true + showLineNumbers: true + softTabs: true softWrap: true softWrapAtPreferredLineLength: true tabType: "soft" zoomFontWhenCtrlScrolling: false + "file-icons": + coloured: true + onChanges: false + strategies: + grammar: true + hashbangs: true + linguist: true + modelines: true + usertypes: true + tabPaneIcon: true + "find-and-replace": + autocompleteSearches: true + closeFindPanelAfterSearch: false + focusEditorAfterSearch: false + projectSearchResultsPaneSplitDirection: "none" + scrollToResultOnLiveSearch: false + showSearchWrapIcon: true "fuzzy-finder": ignoredNames: [ "node_modules" + "*.tar.xz" + "*.iso" + "*.db" + "*.class" + "*.ttf" + "*.otf" + "*.woff" + "*.woff2" + "*.shar" + "*.jar" ] prefillFromSelection: true preserveLastSearch: true + searchAllPanes: true + useAlternateScoring: true "git-diff": showIconsInEditorGutter: true + "highlight-selected": + hideHighlightOnSelectedWord: false + highlightBackground: false + highlightInPanes: true + ignoreCase: false + onlyHighlightWholeWords: true + showInStatusBar: true hyperclick: linuxTriggerKeys: "shiftKey" win32TriggerKeys: "shiftKey" + "language-babel": + allowLocalOverride: true + autoIndentJSX: false + babelMapsAddUrl: true + createMap: false + createTargetDirectories: true + createTranspiledCode: false + disableWhenNoBabelrcFileInPath: true + emmetCSSAutocomplete: true + suppressSourcePathMessages: true + suppressTranspileOnSaveMessages: true + transpileOnSave: false + "language-generic-config": + enableAutomatch: true + "line-ending-selector": + defaultLineEnding: "LF" + linter: + lintOnChange: true + lintOnOpen: true + lintPreviewTabs: true + "linter-eslint": + disableEslintIgnore: false + disableFSCache: false + disableWhenNoEslintConfig: true + fixOnSave: false + showRuleIdInMessage: true + useGlobalEslint: false "linter-less": ieCompatibilityChecks: false + ignoreLessrc: false + ignoreUndefinedGlobalVariables: false + ignoreUndefinedMixins: true + ignoreUndefinedVariables: true + strictUnits: false "linter-markdown": presetConsistentWithoutConfig: false presetRecommendedWithoutConfig: false + yamlWithoutConfig: true + "linter-stylelint": + disableWhenNoConfig: false + showIgnored: false + useStandard: false + "linter-ui-default": + decorateOnTreeView: "Files" + gutterPosition: "Right" + hidePanelWhenEmpty: true + panelRepresents: "Current File" + showDecorations: true + showPanel: false + showProviderName: false + showStatusBar: true + showTooltip: true + statusBarClickBehavior: "Toggle Panel" + statusBarPosition: "Left" + statusBarRepresents: "Entire Project" + tooltipFollows: "Mouse" + useBusySignal: true "markdown-preview-enhanced": + automaticallyShowPreviewOfMarkdownBeingEdited: true + breakOnSingleNewLine: true closePreviewAutomatically: false + enableCriticMarkupSyntax: false + enableEmojiSyntax: true enableExtendedTableSyntax: true enableScriptExecution: false + enableWikiLinkSyntax: true + enableZenMode: true + frontMatterRenderingOption: "none" imageDropAction: "do nothing" + liveUpdate: true openPreviewPaneAutomatically: false + previewPanePosition: "right" + printBackground: false + scrollSync: true + singlePreview: true minimap: + absoluteMode: false + adjustMinimapWidthOnlyIfSmaller: true + adjustMinimapWidthToSoftWrap: true + autoToggle: true + displayMinimapOnLeft: false + ignoreWhitespacesInTokens: false + independentMinimapScroll: false + minimapScrollIndicator: true + moveCursorOnMinimapClick: false plugins: "git-diff": true "git-diffDecorationsZIndex": 0 @@ -102,35 +255,56 @@ pigments: true pigmentsDecorationsZIndex: 0 scrollAnimation: true + smoothScrolling: true + useHardwareAcceleration: true "nord-atom-syntax": accessibility: commentContrast: 8 "nord-atom-ui": darkerFormFocusEffect: true + notifications: + showErrorsInDevMode: false + "package-generator": + packageSyntax: "javascript" "package-sync": createOnChange: true forceOverwrite: true pigments: + autocompleteSuggestionsFromValue: false + dismissableReloadNotifications: true + extendAutocompleteToColorValue: false + extendAutocompleteToVariables: false + ignoreVcsIgnoredPaths: true + markerType: "native-background" + mergeColorDuplicates: false notifyReloads: false + traverseIntoSymlinkDirectories: false "prettier-atom": formatOnSaveOptions: + enabled: true isDisabledIfNoConfigFile: true isDisabledIfNotInPackageJson: true + respectEslintignore: true + showInStatusBar: true + prettierEslintOptions: + prettierLast: false prettierOptions: printWidth: 120 tabWidth: 2 - useEditorConfig: false + useEditorConfig: true useEslint: true useStylelint: true "project-folder": + closeItemsForRemovedProject: false gitProjectDirectories: [ + "~/code/github/communicode" "~/code/incubator" "~/code/job" "~/yggdrasil" ] gitProjectSearchMaxDepth: 2 + hideLoadedFolderFromAddList: true projectRootDirectories: [ - "~/code/bitfroest" "~/code/lab" ] showGroupOnRemoveListCondition: "some-member-was-loaded" @@ -157,9 +331,34 @@ "en-US" "de-DE" ] + noticesMode: "both" + useLocales: true + "status-bar": + fullWidth: true + isVisible: true tabs: + addNewTabsAtEnd: false + alwaysShowTabBar: true + displayMruTabList: true + enableMruTabSwitching: true enableVcsColoring: true + showIcons: true + "tree-view": + alwaysOpenExisting: false + autoReveal: false + focusOnReveal: true + hideIgnoredNames: false + hideVcsIgnoredFiles: false + sortFoldersBeforeFiles: true + squashDirectoryNames: false welcome: showOnStartup: false whitespace: + ensureSingleTrailingNewline: true + ignoreWhitespaceOnCurrentLine: true + ignoreWhitespaceOnlyLines: false + keepMarkdownLineBreakWhitespace: true removeTrailingWhitespace: false +".git-commit.text": + editor: + preferredLineLength: 72 From 12dc96093b796187f3f39f20fb7ef3e350a2da57 Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Sun, 9 Sep 2018 19:57:00 +0200 Subject: [PATCH 117/214] Add alias for taskwarrior A shortcut alias `t` for taskwarrior (1) should be added. This also includes the renaming of the current `t` alias of trash-cli (2) to `trm`. References: (1) https://taskwarrior.org (2) https://github.com/andreafrancia/trash-cli Closes GH-126 --- snowblocks/bash/core/aliases | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/snowblocks/bash/core/aliases b/snowblocks/bash/core/aliases index d0a3eec..745c220 100644 --- a/snowblocks/bash/core/aliases +++ b/snowblocks/bash/core/aliases @@ -22,6 +22,13 @@ alias sbrd='mvn spring-boot:run -Drun.jvmArguments="-agentlib:jdwp=transport=dt_ # +--- pacman ---+ alias pacman='pacman --config ~/.pacman.conf' +# +--- trash-cli ---+ +# Shortcut to move a file into the trash. +alias trm='trash' + +# +--- taskwarrior ---+ +alias t='task' + # +--- wget ---+ # Disable log file alias wget='wget --hsts-file=' @@ -60,12 +67,11 @@ alias date='date "+%Y-%m-%d %H:%M:%S UTC%z"' alias lsraw='LC_COLLATE=C \ls -N1 --group-directories-first' # Shorthand for alias to -# -# * only display ANSI "color" escape sequences in "raw" form. (-R, --RAW-CONTROL-CHARS) -# * automatically exit if the entire file can be displayed on the first screen. (-F, --quit-if-one-screen) -# * disable sending the termcap (de)initialization strings to the terminal to avoid unnecessary operations like -# clearing the screen. (-X, --no-init) -# * use two tab stops. (-x2, --tabs=n) +# * only display ANSI "color" escape sequences in "raw" form. (-R, --RAW-CONTROL-CHARS) +# * automatically exit if the entire file can be displayed on the first screen. (-F, --quit-if-one-screen) +# * disable sending the termcap (de)initialization strings to the terminal to avoid unnecessary operations like +# clearing the screen. (-X, --no-init) +# * use two tab stops. (-x2, --tabs=n) alias less='less -RFXx2' # Show mode bits of files and directories in ocal form, @@ -80,6 +86,3 @@ alias lsm='stat -c "%A %a %N"' # +-------+ # Alert via notify for long running commands. alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"' - -# Shortcut for "trash-cli" to move a file into the trash. -alias t='trash' From 0cdb1dd268ab78d1b563383db1fe805d08a46829 Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Sun, 9 Sep 2018 20:06:46 +0200 Subject: [PATCH 118/214] Add aliases for timewarrior Added shortcut aliases for timewarrior (1): * `tw` = `tw summary` - Shortcut to show the summary. * `tws` = `timew :ids` - Shortcut to show IDs by default (depends on `alias.tw`). References: (1) https://taskwarrior.org/docs/timewarrior Closes GH-127 --- snowblocks/bash/core/aliases | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/snowblocks/bash/core/aliases b/snowblocks/bash/core/aliases index 745c220..4a571e8 100644 --- a/snowblocks/bash/core/aliases +++ b/snowblocks/bash/core/aliases @@ -22,13 +22,25 @@ alias sbrd='mvn spring-boot:run -Drun.jvmArguments="-agentlib:jdwp=transport=dt_ # +--- pacman ---+ alias pacman='pacman --config ~/.pacman.conf' +# +--- taskwarrior ---+ +alias t='task' + +# +--- timewarrior ---+ +# Shortcut to show IDs by default. +# +# @see https://taskwarrior.org/docs/timewarrior/hints.html +alias tw='timew :ids' + +# Shortcut to show a summary. +# +# @depends alias.tw +# @see https://taskwarrior.org/docs/timewarrior/hints.html +alias tws='tw summary' + # +--- trash-cli ---+ # Shortcut to move a file into the trash. alias trm='trash' -# +--- taskwarrior ---+ -alias t='task' - # +--- wget ---+ # Disable log file alias wget='wget --hsts-file=' From 68e0289a2f4c0486cce1f35af1742889ce99d9e1 Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Mon, 10 Sep 2018 05:50:03 +0200 Subject: [PATCH 119/214] Add package configuration and alias for Buku Buku (1) provides the `BUKU_COLORS` environment variable to allow users to define a custom color scheme. It follows the same principle like the `LSCOLORS` environment variables of the BSD `ls` command. The five letters represent the colors in ordered form of * index * title * url * description/comment/note * tag See the GitHub repository wiki page about how to customize colors (2) for details about available letters and their meaning. Next to this a shortcut alias `bk` should be added to simplify the usage commands. References: (1) https://github.com/jarun/Buku (2) https://github.com/jarun/Buku/wiki/Customize-colors Closes GH-128 --- snowblocks/bash/config/pkg/buku | 23 +++++++++++++++++++++++ snowblocks/bash/core/aliases | 3 +++ 2 files changed, 26 insertions(+) create mode 100644 snowblocks/bash/config/pkg/buku diff --git a/snowblocks/bash/config/pkg/buku b/snowblocks/bash/config/pkg/buku new file mode 100644 index 0000000..98cabda --- /dev/null +++ b/snowblocks/bash/config/pkg/buku @@ -0,0 +1,23 @@ +#!/usr/bin/env bash +# Copyright (c) 2016-present Arctic Ice Studio +# Copyright (c) 2016-present Sven Greb + +# Project: igloo +# Repository: https://github.com/arcticicestudio/igloo +# License: MIT +# References: +# https://github.com/jarun/Buku +# https://github.com/jarun/Buku/wiki/Customize-colors + +# Defines custom colors for "buku" according to the same principle like the `LSCOLORS` environment variables of the BSD +# `ls` command. +# The five letters represent the colors in ordered form of +# - index +# - title +# - url +# - description/comment/note +# - tag +# +# See the GitHub repository wiki for details about available letters and their meaning. +# @see https://github.com/jarun/Buku/wiki/Customize-colors +export BUKU_COLORS="hOghE" diff --git a/snowblocks/bash/core/aliases b/snowblocks/bash/core/aliases index 4a571e8..fe7d06a 100644 --- a/snowblocks/bash/core/aliases +++ b/snowblocks/bash/core/aliases @@ -15,6 +15,9 @@ # +--- atom ---+ alias atom-hidpi='atom --force-device-scale-factor=1.5' +# +--- buku ---+ +alias bk='buku' + # +--- java ---+ alias jj='java -jar' alias sbrd='mvn spring-boot:run -Drun.jvmArguments="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=9999"' From ff85c3d035f16af7ea0ca419ead9b93db1bd1a24 Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Tue, 11 Sep 2018 05:56:34 +0200 Subject: [PATCH 120/214] Remove Markdown plugin plasticboy/vim-markdown Removed the plasticboy/vim-markdown (1) plugin (added in GH-38) again. The default Markdown syntax has been updated and now also supports many (non-standard) Markdown extensions while the plugin causes some compatibility problems. References: (1) https://github.com/plasticboy/vim-markdown Closes GH-129 --- snowblocks/vim/vimrc | 1 - 1 file changed, 1 deletion(-) diff --git a/snowblocks/vim/vimrc b/snowblocks/vim/vimrc index 766f253..5b192dc 100644 --- a/snowblocks/vim/vimrc +++ b/snowblocks/vim/vimrc @@ -33,7 +33,6 @@ Plug 'airblade/vim-gitgutter' "+--- Syntax ---+ Plug 'pangloss/vim-javascript' Plug 'mxw/vim-jsx' -Plug 'plasticboy/vim-markdown' "+--- Color Themes ---+ Plug 'arcticicestudio/nord-vim' From 1f3815e7fb4f79a185c88be06f49f7408ce5e782 Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Thu, 13 Sep 2018 17:55:26 +0200 Subject: [PATCH 121/214] Create snowblock for GPG Createed a new snowblock for GPG (1) including * the `gpg.conf` (2) file for the configuration of GPG References: (1) https://gnupg.org (2) https://www.gnupg.org/documentation/manuals/gnupg/GPG-Configuration.html Closes GH-130 --- snowblocks/gpg/gpg.conf | 37 +++++++++++++++++++++++++++++++++++ snowblocks/gpg/snowblock.json | 13 ++++++++++++ 2 files changed, 50 insertions(+) create mode 100644 snowblocks/gpg/gpg.conf create mode 100644 snowblocks/gpg/snowblock.json diff --git a/snowblocks/gpg/gpg.conf b/snowblocks/gpg/gpg.conf new file mode 100644 index 0000000..598ae70 --- /dev/null +++ b/snowblocks/gpg/gpg.conf @@ -0,0 +1,37 @@ +# Copyright (c) 2016-present Arctic Ice Studio +# Copyright (c) 2016-present Sven Greb + +# Project: igloo +# Repository: https://github.com/arcticicestudio/igloo +# License: MIT +# References: +# https://www.gnupg.org/documentation/manuals/gnupg/GPG-Configuration.html +# https://wiki.archlinux.org/index.php/GnuPG +# gpg(1) +# gpg-agent(1) + +# Enable the usage of the GPG agent. +use-agent + +# +----------+ +# + Behavior + +# +----------+ + +# Disable inclusion of the version string in ASCII armored output. +no-emit-version + +# Disable comment string in clear text signatures and ASCII armored messages. +no-comments + +# Display long key IDs. +keyid-format 0xlong + +# List all keys (or the specified ones) along with their fingerprints. +with-fingerprint + +# +-----------+ +# + Keyserver + +# +-----------+ + +# When searching for a key with `--search-keys`, include keys that are marked on the keyserver as revoked. +keyserver-options include-revoked diff --git a/snowblocks/gpg/snowblock.json b/snowblocks/gpg/snowblock.json new file mode 100644 index 0000000..07843a8 --- /dev/null +++ b/snowblocks/gpg/snowblock.json @@ -0,0 +1,13 @@ +[ + { + "clean": ["~/.gnupg"] + }, + { + "link": { + "~/.gnupg/gpg.conf": { + "create": true, + "path": "gpg.conf" + } + } + } +] From 56bc0729367d53c90504d1fdefc5d41093a7a7f9 Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Thu, 13 Sep 2018 20:51:11 +0200 Subject: [PATCH 122/214] Update copyright/information comment header MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Some files still used a "hard-coded" copyright year that should be changed to use the `-present` pattern to prevent unnecessary overhead on each year change. Also the copyright email for „Sven Greb“ is invalid and has been updated to the latest valid email address. Closes GH-123 --- .gitignore | 7 +++++++ .gitmodules | 7 +++++++ LICENSE.md | 4 ++-- README.md | 2 +- bootstrap | 4 ++-- snowblocks/atom/config.cson | 2 +- snowblocks/atom/keymap.cson | 4 ++-- snowblocks/atom/packages.cson | 4 ++-- snowblocks/atom/project-folder.cson | 4 ++-- snowblocks/bash/bin/colors | 5 +++-- snowblocks/bash/bin/dsf | 5 +++-- snowblocks/bash/bin/keybase-stop | 5 +++-- snowblocks/bash/bin/treed | 5 +++-- snowblocks/bash/bootstrap | 6 ++++-- snowblocks/bash/config/env/igloo | 5 +++-- snowblocks/bash/config/pkg/buku | 5 +++-- snowblocks/bash/config/pkg/dircolors | 5 +++-- snowblocks/bash/config/pkg/gradle | 5 +++-- snowblocks/bash/config/pkg/grep | 5 +++-- snowblocks/bash/config/pkg/gulp | 5 +++-- snowblocks/bash/config/pkg/history | 5 +++-- snowblocks/bash/config/pkg/java | 5 +++-- snowblocks/bash/config/pkg/less | 5 +++-- snowblocks/bash/config/pkg/pacaur | 5 +++-- snowblocks/bash/config/pkg/sudo | 5 +++-- snowblocks/bash/core/aliases | 5 +++-- snowblocks/bash/core/functions | 5 +++-- snowblocks/bash/core/loader/env | 5 +++-- snowblocks/bash/core/loader/pkg | 5 +++-- snowblocks/bash/core/prompt | 5 +++-- snowblocks/bash/core/shelloptions | 5 +++-- snowblocks/cower/config | 4 ++-- snowblocks/git/gitattributes | 4 ++-- snowblocks/git/gitconfig | 4 ++-- snowblocks/git/gitconfig-auth-job.igloocrypt | Bin 136 -> 377 bytes .../git/gitconfig-auth-svengreb.igloocrypt | Bin 139 -> 380 bytes snowblocks/git/gitconfig-auth.igloocrypt | Bin 155 -> 396 bytes snowblocks/git/gitignore | 4 ++-- snowblocks/gpg/gpg.conf | 4 ++-- snowblocks/htop/htoprc | 4 ++-- snowblocks/npm/npmrc | 4 ++-- snowblocks/pacman/makepkg.conf | 4 ++-- snowblocks/pacman/pacman.conf.archbook | 4 ++-- snowblocks/pacman/pacman.conf.igloo | 4 ++-- snowblocks/plank/themes/igloo/dock.theme | 4 ++-- .../units/user/igloosync-dropbox.service | 7 +++++++ snowblocks/systemd/units/user/ssh-agent.service | 7 +++++++ .../hooks/on-modify-track-timewarrior.py | 4 ++-- .../hooks/on-modify-track-total-active-time.py | 4 ++-- snowblocks/taskwarrior/nord.theme | 4 ++-- snowblocks/taskwarrior/taskopenrc | 4 ++-- snowblocks/taskwarrior/taskrc | 5 +++-- snowblocks/timewarrior/nord.theme | 4 ++-- snowblocks/timewarrior/timewarrior.cfg.archbook | 4 ++-- snowblocks/timewarrior/timewarrior.cfg.igloo | 4 ++-- snowblocks/tmux/tmux.conf | 4 ++-- snowblocks/vim/vimrc | 4 ++-- snowblocks/xdg/applications/atom.desktop | 7 +++++++ snowblocks/xdg/applications/evolution.desktop | 7 +++++++ snowblocks/xdg/applications/gpick.desktop | 7 +++++++ snowblocks/xdg/applications/gtkhash.desktop | 7 +++++++ snowblocks/xdg/applications/minecraft.desktop | 7 +++++++ .../applications/org.gnome.Screenshot.desktop | 7 +++++++ .../xdg/applications/org.gnome.gedit.desktop | 7 +++++++ .../xdg/applications/shotwell-viewer.desktop | 7 +++++++ snowblocks/xdg/autostart/dropbox.desktop | 7 +++++++ snowblocks/xdg/autostart/plank.desktop.archbook | 7 +++++++ snowblocks/xdg/autostart/plank.desktop.igloo | 7 +++++++ snowblocks/xdg/gtk-3.0/settings.ini | 4 ++-- snowblocks/xdg/user-dirs.conf | 4 ++-- snowblocks/xdg/user-dirs.dirs | 4 ++-- .../igloo-mbp-lid-suspend.sh.archbook | 5 +++-- .../igloo-mbp-lid-suspend.service.archbook | 4 ++-- .../igloo-udev-logitech-r400-presenter.hwdb | 4 ++-- 74 files changed, 240 insertions(+), 110 deletions(-) diff --git a/.gitignore b/.gitignore index a024ac3..8880e4d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,10 @@ +# Copyright (C) 2016-present Arctic Ice Studio +# Copyright (C) 2016-present Sven Greb + +# Project: igloo +# Repository: https://github.com/arcticicestudio/igloo +# License: MIT + # +------------+ # + Snowblocks + # +------------+ diff --git a/.gitmodules b/.gitmodules index 02a54d3..8b6c114 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,10 @@ +# Copyright (C) 2016-present Arctic Ice Studio +# Copyright (C) 2016-present Sven Greb + +# Project: igloo +# Repository: https://github.com/arcticicestudio/igloo +# License: MIT + [submodule ".snowsaw"] path = .snowsaw url = https://github.com/arcticicestudio/snowsaw diff --git a/LICENSE.md b/LICENSE.md index 8a47ba1..313c22e 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -1,7 +1,7 @@ MIT License (MIT) -Copyright (c) 2016-2017 Arctic Ice Studio -Copyright (c) 2016-2017 Sven Greb +Copyright (C) 2016-present Arctic Ice Studio +Copyright (C) 2016-present Sven Greb Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README.md b/README.md index d45027c..a9c294d 100644 --- a/README.md +++ b/README.md @@ -34,7 +34,7 @@ Please report issues/bugs, feature requests and suggestions for improvements to

-

Copyright © 2016-2017 Arctic Ice Studio

+

Copyright © 2016-present Arctic Ice Studio

diff --git a/bootstrap b/bootstrap index e2db990..2257810 100755 --- a/bootstrap +++ b/bootstrap @@ -1,7 +1,7 @@ #!/usr/bin/env bash -# Copyright (c) 2016-2017 Arctic Ice Studio -# Copyright (c) 2016-2017 Sven Greb +# Copyright (C) 2016-present Arctic Ice Studio +# Copyright (C) 2016-present Sven Greb # Project: igloo # Repository: https://github.com/arcticicestudio/igloo diff --git a/snowblocks/atom/config.cson b/snowblocks/atom/config.cson index fe9142a..eef3f43 100644 --- a/snowblocks/atom/config.cson +++ b/snowblocks/atom/config.cson @@ -228,7 +228,7 @@ enableExtendedTableSyntax: true enableScriptExecution: false enableWikiLinkSyntax: true - enableZenMode: true + enableZenMode: false frontMatterRenderingOption: "none" imageDropAction: "do nothing" liveUpdate: true diff --git a/snowblocks/atom/keymap.cson b/snowblocks/atom/keymap.cson index feebc55..0a63bb5 100644 --- a/snowblocks/atom/keymap.cson +++ b/snowblocks/atom/keymap.cson @@ -1,5 +1,5 @@ -# Copyright (c) 2017-present Arctic Ice Studio -# Copyright (c) 2017-present Sven Greb +# Copyright (C) 2016-present Arctic Ice Studio +# Copyright (C) 2016-present Sven Greb # Project: igloo # Repository: https://github.com/arcticicestudio/igloo diff --git a/snowblocks/atom/packages.cson b/snowblocks/atom/packages.cson index e360cd8..01e3ccb 100644 --- a/snowblocks/atom/packages.cson +++ b/snowblocks/atom/packages.cson @@ -1,5 +1,5 @@ -# Copyright (c) 2017-present Arctic Ice Studio -# Copyright (c) 2017-present Sven Greb +# Copyright (C) 2016-present Arctic Ice Studio +# Copyright (C) 2016-present Sven Greb # Project: igloo # Repository: https://github.com/arcticicestudio/igloo diff --git a/snowblocks/atom/project-folder.cson b/snowblocks/atom/project-folder.cson index 2e7a300..8cc924a 100644 --- a/snowblocks/atom/project-folder.cson +++ b/snowblocks/atom/project-folder.cson @@ -1,5 +1,5 @@ -# Copyright (c) 2017-present Arctic Ice Studio -# Copyright (c) 2017-present Sven Greb +# Copyright (C) 2016-present Arctic Ice Studio +# Copyright (C) 2016-present Sven Greb # Project: igloo # Repository: https://github.com/arcticicestudio/igloo diff --git a/snowblocks/bash/bin/colors b/snowblocks/bash/bin/colors index e068417..9c6d985 100755 --- a/snowblocks/bash/bin/colors +++ b/snowblocks/bash/bin/colors @@ -1,6 +1,7 @@ #!/usr/bin/env bash -# Copyright (c) 2016-2017 Arctic Ice Studio -# Copyright (c) 2016-2017 Sven Greb + +# Copyright (C) 2016-present Arctic Ice Studio +# Copyright (C) 2016-present Sven Greb # Project: igloo # Repository: https://github.com/arcticicestudio/igloo diff --git a/snowblocks/bash/bin/dsf b/snowblocks/bash/bin/dsf index dedf125..a441836 100755 --- a/snowblocks/bash/bin/dsf +++ b/snowblocks/bash/bin/dsf @@ -1,6 +1,7 @@ #!/usr/bin/env bash -# Copyright (c) 2016-2017 Arctic Ice Studio -# Copyright (c) 2016-2017 Sven Greb + +# Copyright (C) 2016-present Arctic Ice Studio +# Copyright (C) 2016-present Sven Greb # Project: igloo # Repository: https://github.com/arcticicestudio/igloo diff --git a/snowblocks/bash/bin/keybase-stop b/snowblocks/bash/bin/keybase-stop index c053a12..aebc54d 100755 --- a/snowblocks/bash/bin/keybase-stop +++ b/snowblocks/bash/bin/keybase-stop @@ -1,6 +1,7 @@ #!/usr/bin/env bash -# Copyright (c) 2016-2017 Arctic Ice Studio -# Copyright (c) 2016-2017 Sven Greb + +# Copyright (C) 2016-present Arctic Ice Studio +# Copyright (C) 2016-present Sven Greb # Project: igloo # Repository: https://github.com/arcticicestudio/igloo diff --git a/snowblocks/bash/bin/treed b/snowblocks/bash/bin/treed index b0e6e2e..b229d97 100755 --- a/snowblocks/bash/bin/treed +++ b/snowblocks/bash/bin/treed @@ -1,6 +1,7 @@ #!/usr/bin/env bash -# Copyright (c) 2016-2017 Arctic Ice Studio -# Copyright (c) 2016-2017 Sven Greb + +# Copyright (C) 2016-present Arctic Ice Studio +# Copyright (C) 2016-present Sven Greb # Project: igloo # Repository: https://github.com/arcticicestudio/igloo diff --git a/snowblocks/bash/bootstrap b/snowblocks/bash/bootstrap index d185766..0f4eee8 100755 --- a/snowblocks/bash/bootstrap +++ b/snowblocks/bash/bootstrap @@ -1,5 +1,7 @@ -# Copyright (c) 2016-2017 Arctic Ice Studio -# Copyright (c) 2016-2017 Sven Greb +#!/usr/bin/env bash + +# Copyright (C) 2016-present Arctic Ice Studio +# Copyright (C) 2016-present Sven Greb # Project: igloo # Repository: https://github.com/arcticicestudio/igloo diff --git a/snowblocks/bash/config/env/igloo b/snowblocks/bash/config/env/igloo index 47b6f77..ce3592b 100644 --- a/snowblocks/bash/config/env/igloo +++ b/snowblocks/bash/config/env/igloo @@ -1,6 +1,7 @@ #!/usr/bin/env bash -# Copyright (c) 2016-2017 Arctic Ice Studio -# Copyright (c) 2016-2017 Sven Greb + +# Copyright (C) 2016-present Arctic Ice Studio +# Copyright (C) 2016-present Sven Greb # Project: igloo # Repository: https://github.com/arcticicestudio/igloo diff --git a/snowblocks/bash/config/pkg/buku b/snowblocks/bash/config/pkg/buku index 98cabda..c4bc2b7 100644 --- a/snowblocks/bash/config/pkg/buku +++ b/snowblocks/bash/config/pkg/buku @@ -1,6 +1,7 @@ #!/usr/bin/env bash -# Copyright (c) 2016-present Arctic Ice Studio -# Copyright (c) 2016-present Sven Greb + +# Copyright (C) 2016-present Arctic Ice Studio +# Copyright (C) 2016-present Sven Greb # Project: igloo # Repository: https://github.com/arcticicestudio/igloo diff --git a/snowblocks/bash/config/pkg/dircolors b/snowblocks/bash/config/pkg/dircolors index de77a7a..968fca2 100644 --- a/snowblocks/bash/config/pkg/dircolors +++ b/snowblocks/bash/config/pkg/dircolors @@ -1,6 +1,7 @@ #!/usr/bin/env bash -# Copyright (c) 2016-2017 Arctic Ice Studio -# Copyright (c) 2016-2017 Sven Greb + +# Copyright (C) 2016-present Arctic Ice Studio +# Copyright (C) 2016-present Sven Greb # Project: igloo # Repository: https://github.com/arcticicestudio/igloo diff --git a/snowblocks/bash/config/pkg/gradle b/snowblocks/bash/config/pkg/gradle index 7245a02..1b0448f 100644 --- a/snowblocks/bash/config/pkg/gradle +++ b/snowblocks/bash/config/pkg/gradle @@ -1,6 +1,7 @@ #!/usr/bin/env bash -# Copyright (c) 2016-2017 Arctic Ice Studio -# Copyright (c) 2016-2017 Sven Greb + +# Copyright (C) 2016-present Arctic Ice Studio +# Copyright (C) 2016-present Sven Greb # Project: igloo # Repository: https://github.com/arcticicestudio/igloo diff --git a/snowblocks/bash/config/pkg/grep b/snowblocks/bash/config/pkg/grep index 6b9b588..9a0cb1a 100644 --- a/snowblocks/bash/config/pkg/grep +++ b/snowblocks/bash/config/pkg/grep @@ -1,6 +1,7 @@ #!/usr/bin/env bash -# Copyright (c) 2016-2017 Arctic Ice Studio -# Copyright (c) 2016-2017 Sven Greb + +# Copyright (C) 2016-present Arctic Ice Studio +# Copyright (C) 2016-present Sven Greb # Project: igloo # Repository: https://github.com/arcticicestudio/igloo diff --git a/snowblocks/bash/config/pkg/gulp b/snowblocks/bash/config/pkg/gulp index cb78bed..58390b8 100644 --- a/snowblocks/bash/config/pkg/gulp +++ b/snowblocks/bash/config/pkg/gulp @@ -1,6 +1,7 @@ #!/usr/bin/env bash -# Copyright (c) 2016-2017 Arctic Ice Studio -# Copyright (c) 2016-2017 Sven Greb + +# Copyright (C) 2016-present Arctic Ice Studio +# Copyright (C) 2016-present Sven Greb # Project: igloo # Repository: https://github.com/arcticicestudio/igloo diff --git a/snowblocks/bash/config/pkg/history b/snowblocks/bash/config/pkg/history index 3386d40..4bb7e56 100644 --- a/snowblocks/bash/config/pkg/history +++ b/snowblocks/bash/config/pkg/history @@ -1,6 +1,7 @@ #!/usr/bin/env bash -# Copyright (c) 2016-2017 Arctic Ice Studio -# Copyright (c) 2016-2017 Sven Greb + +# Copyright (C) 2016-present Arctic Ice Studio +# Copyright (C) 2016-present Sven Greb # Project: igloo # Repository: https://github.com/arcticicestudio/igloo diff --git a/snowblocks/bash/config/pkg/java b/snowblocks/bash/config/pkg/java index 86deaa1..5fd799a 100644 --- a/snowblocks/bash/config/pkg/java +++ b/snowblocks/bash/config/pkg/java @@ -1,6 +1,7 @@ #!/usr/bin/env bash -# Copyright (c) 2016-2017 Arctic Ice Studio -# Copyright (c) 2016-2017 Sven Greb + +# Copyright (C) 2016-present Arctic Ice Studio +# Copyright (C) 2016-present Sven Greb # Project: igloo # Repository: https://github.com/arcticicestudio/igloo diff --git a/snowblocks/bash/config/pkg/less b/snowblocks/bash/config/pkg/less index 020bca1..f0f9d19 100644 --- a/snowblocks/bash/config/pkg/less +++ b/snowblocks/bash/config/pkg/less @@ -1,6 +1,7 @@ #!/usr/bin/env bash -# Copyright (c) 2016-2017 Arctic Ice Studio -# Copyright (c) 2016-2017 Sven Greb + +# Copyright (C) 2016-present Arctic Ice Studio +# Copyright (C) 2016-present Sven Greb # Project: igloo # Repository: https://github.com/arcticicestudio/igloo diff --git a/snowblocks/bash/config/pkg/pacaur b/snowblocks/bash/config/pkg/pacaur index f591aa5..e801060 100644 --- a/snowblocks/bash/config/pkg/pacaur +++ b/snowblocks/bash/config/pkg/pacaur @@ -1,6 +1,7 @@ #!/usr/bin/env bash -# Copyright (c) 2016-2017 Arctic Ice Studio -# Copyright (c) 2016-2017 Sven Greb + +# Copyright (C) 2016-present Arctic Ice Studio +# Copyright (C) 2016-present Sven Greb # Project: igloo # Repository: https://github.com/arcticicestudio/igloo diff --git a/snowblocks/bash/config/pkg/sudo b/snowblocks/bash/config/pkg/sudo index cb96daf..f7f4837 100644 --- a/snowblocks/bash/config/pkg/sudo +++ b/snowblocks/bash/config/pkg/sudo @@ -1,6 +1,7 @@ #!/usr/bin/env bash -# Copyright (c) 2016-2017 Arctic Ice Studio -# Copyright (c) 2016-2017 Sven Greb + +# Copyright (C) 2016-present Arctic Ice Studio +# Copyright (C) 2016-present Sven Greb # Project: igloo # Repository: https://github.com/arcticicestudio/igloo diff --git a/snowblocks/bash/core/aliases b/snowblocks/bash/core/aliases index fe7d06a..597d176 100644 --- a/snowblocks/bash/core/aliases +++ b/snowblocks/bash/core/aliases @@ -1,6 +1,7 @@ #!/usr/bin/env bash -# Copyright (c) 2016-2017 Arctic Ice Studio -# Copyright (c) 2016-2017 Sven Greb + +# Copyright (C) 2016-present Arctic Ice Studio +# Copyright (C) 2016-present Sven Greb # Project: igloo # Repository: https://github.com/arcticicestudio/igloo diff --git a/snowblocks/bash/core/functions b/snowblocks/bash/core/functions index 34c31f2..7bb2910 100644 --- a/snowblocks/bash/core/functions +++ b/snowblocks/bash/core/functions @@ -1,6 +1,7 @@ #!/usr/bin/env bash -# Copyright (c) 2016-2017 Arctic Ice Studio -# Copyright (c) 2016-2017 Sven Greb + +# Copyright (C) 2016-present Arctic Ice Studio +# Copyright (C) 2016-present Sven Greb # Project: igloo # Repository: https://github.com/arcticicestudio/igloo diff --git a/snowblocks/bash/core/loader/env b/snowblocks/bash/core/loader/env index 192f20e..0145e4a 100644 --- a/snowblocks/bash/core/loader/env +++ b/snowblocks/bash/core/loader/env @@ -1,6 +1,7 @@ #!/usr/bin/env bash -# Copyright (c) 2016-2017 Arctic Ice Studio -# Copyright (c) 2016-2017 Sven Greb + +# Copyright (C) 2016-present Arctic Ice Studio +# Copyright (C) 2016-present Sven Greb # Project: igloo # Repository: https://github.com/arcticicestudio/igloo diff --git a/snowblocks/bash/core/loader/pkg b/snowblocks/bash/core/loader/pkg index 2a909ec..72b62d7 100644 --- a/snowblocks/bash/core/loader/pkg +++ b/snowblocks/bash/core/loader/pkg @@ -1,6 +1,7 @@ #!/usr/bin/env bash -# Copyright (c) 2016-2017 Arctic Ice Studio -# Copyright (c) 2016-2017 Sven Greb + +# Copyright (C) 2016-present Arctic Ice Studio +# Copyright (C) 2016-present Sven Greb # Project: igloo # Repository: https://github.com/arcticicestudio/igloo diff --git a/snowblocks/bash/core/prompt b/snowblocks/bash/core/prompt index 908e237..59e3c5b 100644 --- a/snowblocks/bash/core/prompt +++ b/snowblocks/bash/core/prompt @@ -1,6 +1,7 @@ #!/usr/bin/env bash -# Copyright (c) 2016-2017 Arctic Ice Studio -# Copyright (c) 2016-2017 Sven Greb + +# Copyright (C) 2016-present Arctic Ice Studio +# Copyright (C) 2016-present Sven Greb # Project: igloo # Repository: https://github.com/arcticicestudio/igloo diff --git a/snowblocks/bash/core/shelloptions b/snowblocks/bash/core/shelloptions index 670e43c..285761c 100644 --- a/snowblocks/bash/core/shelloptions +++ b/snowblocks/bash/core/shelloptions @@ -1,6 +1,7 @@ #!/usr/bin/env bash -# Copyright (c) 2016-2017 Arctic Ice Studio -# Copyright (c) 2016-2017 Sven Greb + +# Copyright (C) 2016-present Arctic Ice Studio +# Copyright (C) 2016-present Sven Greb # Project: igloo # Repository: https://github.com/arcticicestudio/igloo diff --git a/snowblocks/cower/config b/snowblocks/cower/config index 7e72873..ac3318a 100755 --- a/snowblocks/cower/config +++ b/snowblocks/cower/config @@ -1,5 +1,5 @@ -# Copyright (c) 2016-2017 Arctic Ice Studio -# Copyright (c) 2016-2017 Sven Greb +# Copyright (C) 2016-present Arctic Ice Studio +# Copyright (C) 2016-present Sven Greb # Project: igloo # Repository: https://github.com/arcticicestudio/igloo diff --git a/snowblocks/git/gitattributes b/snowblocks/git/gitattributes index 2fa4441..bdf8341 100644 --- a/snowblocks/git/gitattributes +++ b/snowblocks/git/gitattributes @@ -1,5 +1,5 @@ -# Copyright (c) 2016-2017 Arctic Ice Studio -# Copyright (c) 2016-2017 Sven Greb +# Copyright (C) 2016-present Arctic Ice Studio +# Copyright (C) 2016-present Sven Greb # Project: igloo # Repository: https://github.com/arcticicestudio/igloo diff --git a/snowblocks/git/gitconfig b/snowblocks/git/gitconfig index 55479c9..708c2cd 100755 --- a/snowblocks/git/gitconfig +++ b/snowblocks/git/gitconfig @@ -1,5 +1,5 @@ -# Copyright (c) 2016-2017 Arctic Ice Studio -# Copyright (c) 2016-2017 Sven Greb +# Copyright (C) 2016-present Arctic Ice Studio +# Copyright (C) 2016-present Sven Greb # Project: igloo # Repository: https://github.com/arcticicestudio/igloo diff --git a/snowblocks/git/gitconfig-auth-job.igloocrypt b/snowblocks/git/gitconfig-auth-job.igloocrypt index 182d4174ed758574b8d0c31e58eafad4a7147d95..2188b93ac87c0b4a8fc1c2de92b21001600e9fe0 100644 GIT binary patch literal 377 zcmV-<0fznnM@dveQdv+`01)nru*`agF6sIAhGncCSL|myGI*s7P9IkmZeGsQxUdy@ z!qQ0Yv{Kg}rg(<08=pUL7lU=Pe6JhlX9`-z!W0o<$c%Pxzcy z)Q1NSjYi1bIyCg9!t zNkX$+asKwT{M`8WR!UMwV;?IC%?jTWwMh^jH$}he2d2wtZ<7__qBEWu8kt#H1iqPz z#(whKvTn}hUqIdZ@W-;Dw~Q_ys=_ARx9<1g>q%5?CKmP;p@^|c?s>-J~|4!o|e0^ literal 136 zcmV;30C)cYM@dveQdv+`0QcEGK;obMn}^1-HVbe&qe(Zil11R2s^y~rjE6kfe~<6Ho*5d;m7Xxzp`BaDsNV#JDUyXl!;J*+|CyZL2>9iJ2B1s qA~G~06ds4dXePKM4y{Z~rQt6$NSiK1>FwCox#~cuq;`opgd@?I7D8hH diff --git a/snowblocks/git/gitconfig-auth-svengreb.igloocrypt b/snowblocks/git/gitconfig-auth-svengreb.igloocrypt index dfc79dfbb8ca5ec3ead3d236c7797ccca30e97b4..f520839c279a0a8fe0a7b35c1d02dc902f566c6c 100644 GIT binary patch literal 380 zcmV-?0fYVkM@dveQdv+`02~mco5@Sz)YRE=at~u-(7I};0$EFsClTgI8h@8}wda>t z_b)w$ANTb_LzV?A2NfZtk!WO0{+5$~sAg)I!~40>gg=$U=C35M%#US|uY0&*VV|IX zEVKhTxMV;3_+@usU6mO8W{+A@|iUOdoABb zhuRoV+hsv}q4ef@$u=xTQm;)t``x)`?L&p0{&!_YEZbuZVHW2E0R5w`0^or}>PZ+- zEZ7&OmG>>3WbtTKT~e)rquBQ5j!QMPIJh%D9S a1(?2%J6O|cU#$e^ATFgJq%1k#%xd@TcYx<<7sJE;Hw diff --git a/snowblocks/git/gitconfig-auth.igloocrypt b/snowblocks/git/gitconfig-auth.igloocrypt index c0fd67a56e7817750ae0b2f110136a46a5dd9281..ce9b5116b48059edd6cbdc3130ca61d45748d8ed 100644 GIT binary patch literal 396 zcmV;70dxKUM@dveQdv+`0E_zb2K}_zgiN}B(_x{mX1Sl-C&`UwXFv4WZODbjL-7s- z1p;ClBK$6NgZ@Y9d?41X)693CC?76{M1nTP_`hG`Pw=zl))@*Q1g|6MzF)G=BfZuc?a`Pl7OTg<_O z1|t|2{=1J17l5JPtrSt+ckzo?=2V9Yokv5AS3ViD^g+lhF+EZi%Z7~^NrZrbO=I@&~2?K=I)%~YLx zi)#_!)pxlKBu#x*9R7;Fz2i0@uKw(Poy)-fG0~`JwO>q5mrwBAXPbDyr#;zHS9 qL`UQfuW1UiL55pu!c5m z7pOWP)K8^BPk;9i%s0p7KBD3XlaStBK2#+k3itleBNiM>Agp+llM5ZFtt~eO} J%Q=5PuRk{#MV$Zu diff --git a/snowblocks/git/gitignore b/snowblocks/git/gitignore index 07ce745..bfd5359 100755 --- a/snowblocks/git/gitignore +++ b/snowblocks/git/gitignore @@ -1,5 +1,5 @@ -# Copyright (c) 2016-2017 Arctic Ice Studio -# Copyright (c) 2016-2017 Sven Greb +# Copyright (C) 2016-present Arctic Ice Studio +# Copyright (C) 2016-present Sven Greb # Project: igloo # Repository: https://github.com/arcticicestudio/igloo diff --git a/snowblocks/gpg/gpg.conf b/snowblocks/gpg/gpg.conf index 598ae70..ffaa82e 100644 --- a/snowblocks/gpg/gpg.conf +++ b/snowblocks/gpg/gpg.conf @@ -1,5 +1,5 @@ -# Copyright (c) 2016-present Arctic Ice Studio -# Copyright (c) 2016-present Sven Greb +# Copyright (C) 2016-present Arctic Ice Studio +# Copyright (C) 2016-present Sven Greb # Project: igloo # Repository: https://github.com/arcticicestudio/igloo diff --git a/snowblocks/htop/htoprc b/snowblocks/htop/htoprc index 07ac778..972ca30 100644 --- a/snowblocks/htop/htoprc +++ b/snowblocks/htop/htoprc @@ -1,5 +1,5 @@ -# Copyright (c) 2016-2017 Arctic Ice Studio -# Copyright (c) 2016-2017 Sven Greb +# Copyright (C) 2016-present Arctic Ice Studio +# Copyright (C) 2016-present Sven Greb # Project: igloo # Repository: https://github.com/arcticicestudio/igloo diff --git a/snowblocks/npm/npmrc b/snowblocks/npm/npmrc index 79afe0a..c1c7989 100644 --- a/snowblocks/npm/npmrc +++ b/snowblocks/npm/npmrc @@ -1,5 +1,5 @@ -; Copyright (c) 2016-2017 Arctic Ice Studio -; Copyright (c) 2016-2017 Sven Greb +; Copyright (C) 2016-present Arctic Ice Studio +; Copyright (C) 2016-present Sven Greb ; Project: igloo ; Repository: https://github.com/arcticicestudio/igloo diff --git a/snowblocks/pacman/makepkg.conf b/snowblocks/pacman/makepkg.conf index 70d13f2..88cd1dd 100644 --- a/snowblocks/pacman/makepkg.conf +++ b/snowblocks/pacman/makepkg.conf @@ -1,5 +1,5 @@ -# Copyright (c) 2016-2017 Arctic Ice Studio -# Copyright (c) 2016-2017 Sven Greb +# Copyright (C) 2016-present Arctic Ice Studio +# Copyright (C) 2016-present Sven Greb # Project: igloo # Repository: https://github.com/arcticicestudio/igloo diff --git a/snowblocks/pacman/pacman.conf.archbook b/snowblocks/pacman/pacman.conf.archbook index 2c5a078..c850dd7 100644 --- a/snowblocks/pacman/pacman.conf.archbook +++ b/snowblocks/pacman/pacman.conf.archbook @@ -1,5 +1,5 @@ -# Copyright (c) 2016-2017 Arctic Ice Studio -# Copyright (c) 2016-2017 Sven Greb +# Copyright (C) 2016-present Arctic Ice Studio +# Copyright (C) 2016-present Sven Greb # Project: igloo # Repository: https://github.com/arcticicestudio/igloo diff --git a/snowblocks/pacman/pacman.conf.igloo b/snowblocks/pacman/pacman.conf.igloo index 77bb571..8747574 100644 --- a/snowblocks/pacman/pacman.conf.igloo +++ b/snowblocks/pacman/pacman.conf.igloo @@ -1,5 +1,5 @@ -# Copyright (c) 2016-2017 Arctic Ice Studio -# Copyright (c) 2016-2017 Sven Greb +# Copyright (C) 2016-present Arctic Ice Studio +# Copyright (C) 2016-present Sven Greb # Project: igloo # Repository: https://github.com/arcticicestudio/igloo diff --git a/snowblocks/plank/themes/igloo/dock.theme b/snowblocks/plank/themes/igloo/dock.theme index 0aec848..d6c97d9 100755 --- a/snowblocks/plank/themes/igloo/dock.theme +++ b/snowblocks/plank/themes/igloo/dock.theme @@ -1,5 +1,5 @@ -# Copyright (c) 2016-2017 Arctic Ice Studio -# Copyright (c) 2016-2017 Sven Greb +# Copyright (C) 2016-present Arctic Ice Studio +# Copyright (C) 2016-present Sven Greb # Project: igloo # Repository: https://github.com/arcticicestudio/igloo diff --git a/snowblocks/systemd/units/user/igloosync-dropbox.service b/snowblocks/systemd/units/user/igloosync-dropbox.service index 1b3a7ba..705c4a7 100644 --- a/snowblocks/systemd/units/user/igloosync-dropbox.service +++ b/snowblocks/systemd/units/user/igloosync-dropbox.service @@ -1,3 +1,10 @@ +# Copyright (C) 2016-present Arctic Ice Studio +# Copyright (C) 2016-present Sven Greb + +# Project: igloo +# Repository: https://github.com/arcticicestudio/igloo +# License: MIT + [Unit] Description=Dropbox Synchronization (igloosync-dropbox) After=network.target local-fs.target diff --git a/snowblocks/systemd/units/user/ssh-agent.service b/snowblocks/systemd/units/user/ssh-agent.service index 161b15a..cca17a6 100644 --- a/snowblocks/systemd/units/user/ssh-agent.service +++ b/snowblocks/systemd/units/user/ssh-agent.service @@ -1,3 +1,10 @@ +# Copyright (C) 2016-present Arctic Ice Studio +# Copyright (C) 2016-present Sven Greb + +# Project: igloo +# Repository: https://github.com/arcticicestudio/igloo +# License: MIT + [Unit] Description=SSH Key Agent diff --git a/snowblocks/taskwarrior/hooks/on-modify-track-timewarrior.py b/snowblocks/taskwarrior/hooks/on-modify-track-timewarrior.py index 065e421..6306575 100755 --- a/snowblocks/taskwarrior/hooks/on-modify-track-timewarrior.py +++ b/snowblocks/taskwarrior/hooks/on-modify-track-timewarrior.py @@ -1,8 +1,8 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2016-present Arctic Ice Studio -# Copyright (c) 2016-present Sven Greb +# Copyright (C) 2016-present Arctic Ice Studio +# Copyright (C) 2016-present Sven Greb # Project: igloo # Repository: https://github.com/arcticicestudio/igloo diff --git a/snowblocks/taskwarrior/hooks/on-modify-track-total-active-time.py b/snowblocks/taskwarrior/hooks/on-modify-track-total-active-time.py index e08fb27..c3332a3 100755 --- a/snowblocks/taskwarrior/hooks/on-modify-track-total-active-time.py +++ b/snowblocks/taskwarrior/hooks/on-modify-track-total-active-time.py @@ -1,8 +1,8 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (c) 2016-present Arctic Ice Studio -# Copyright (c) 2016-present Sven Greb +# Copyright (C) 2016-present Arctic Ice Studio +# Copyright (C) 2016-present Sven Greb # Project: igloo # Repository: https://github.com/arcticicestudio/igloo diff --git a/snowblocks/taskwarrior/nord.theme b/snowblocks/taskwarrior/nord.theme index c90f2e6..9399a8a 100644 --- a/snowblocks/taskwarrior/nord.theme +++ b/snowblocks/taskwarrior/nord.theme @@ -1,5 +1,5 @@ -# Copyright (c) 2016-present Arctic Ice Studio -# Copyright (c) 2016-present Sven Greb +# Copyright (C) 2016-present Arctic Ice Studio +# Copyright (C) 2016-present Sven Greb # Project: igloo # Repository: https://github.com/arcticicestudio/igloo diff --git a/snowblocks/taskwarrior/taskopenrc b/snowblocks/taskwarrior/taskopenrc index fd777bf..7c91695 100644 --- a/snowblocks/taskwarrior/taskopenrc +++ b/snowblocks/taskwarrior/taskopenrc @@ -1,5 +1,5 @@ -# Copyright (c) 2016-present Arctic Ice Studio -# Copyright (c) 2016-present Sven Greb +# Copyright (C) 2016-present Arctic Ice Studio +# Copyright (C) 2016-present Sven Greb # Project: igloo # Repository: https://github.com/arcticicestudio/igloo diff --git a/snowblocks/taskwarrior/taskrc b/snowblocks/taskwarrior/taskrc index 2959116..d1edb48 100644 --- a/snowblocks/taskwarrior/taskrc +++ b/snowblocks/taskwarrior/taskrc @@ -1,5 +1,5 @@ -# Copyright (c) 2016-present Arctic Ice Studio -# Copyright (c) 2016-present Sven Greb +# Copyright (C) 2016-present Arctic Ice Studio +# Copyright (C) 2016-present Sven Greb # Project: igloo # Repository: https://github.com/arcticicestudio/igloo @@ -35,6 +35,7 @@ color=true #+ Context + #+---------+ context.aur=project:aur +context.cckey=project:cckey context.icecore=project:icecore context.icepick=project:icepick context.igloo=project:igloo diff --git a/snowblocks/timewarrior/nord.theme b/snowblocks/timewarrior/nord.theme index 979d14f..da3c387 100644 --- a/snowblocks/timewarrior/nord.theme +++ b/snowblocks/timewarrior/nord.theme @@ -1,5 +1,5 @@ -# Copyright (c) 2016-present Arctic Ice Studio -# Copyright (c) 2016-present Sven Greb +# Copyright (C) 2016-present Arctic Ice Studio +# Copyright (C) 2016-present Sven Greb # Project: igloo # Repository: https://github.com/arcticicestudio/igloo diff --git a/snowblocks/timewarrior/timewarrior.cfg.archbook b/snowblocks/timewarrior/timewarrior.cfg.archbook index efbfdb7..0131d04 100644 --- a/snowblocks/timewarrior/timewarrior.cfg.archbook +++ b/snowblocks/timewarrior/timewarrior.cfg.archbook @@ -1,5 +1,5 @@ -# Copyright (c) 2016-present Arctic Ice Studio -# Copyright (c) 2016-present Sven Greb +# Copyright (C) 2016-present Arctic Ice Studio +# Copyright (C) 2016-present Sven Greb # Project: igloo # Repository: https://github.com/arcticicestudio/igloo diff --git a/snowblocks/timewarrior/timewarrior.cfg.igloo b/snowblocks/timewarrior/timewarrior.cfg.igloo index 68a20d9..a93ad29 100644 --- a/snowblocks/timewarrior/timewarrior.cfg.igloo +++ b/snowblocks/timewarrior/timewarrior.cfg.igloo @@ -1,5 +1,5 @@ -# Copyright (c) 2016-present Arctic Ice Studio -# Copyright (c) 2016-present Sven Greb +# Copyright (C) 2016-present Arctic Ice Studio +# Copyright (C) 2016-present Sven Greb # Project: igloo # Repository: https://github.com/arcticicestudio/igloo diff --git a/snowblocks/tmux/tmux.conf b/snowblocks/tmux/tmux.conf index 7795f7f..549945d 100755 --- a/snowblocks/tmux/tmux.conf +++ b/snowblocks/tmux/tmux.conf @@ -1,5 +1,5 @@ -# Copyright (c) 2016-2017 Arctic Ice Studio -# Copyright (c) 2016-2017 Sven Greb +# Copyright (C) 2016-present Arctic Ice Studio +# Copyright (C) 2016-present Sven Greb # Project: igloo # Repository: https://github.com/arcticicestudio/igloo diff --git a/snowblocks/vim/vimrc b/snowblocks/vim/vimrc index 5b192dc..46b914c 100644 --- a/snowblocks/vim/vimrc +++ b/snowblocks/vim/vimrc @@ -1,5 +1,5 @@ -" Copyright (c) 2016-2017 Arctic Ice Studio -" Copyright (c) 2016-2017 Sven Greb +" Copyright (c) 2016-present Arctic Ice Studio +" Copyright (c) 2016-present Sven Greb " Project: igloo " Repository: https://github.com/arcticicestudio/igloo diff --git a/snowblocks/xdg/applications/atom.desktop b/snowblocks/xdg/applications/atom.desktop index c57d01d..a3c7025 100644 --- a/snowblocks/xdg/applications/atom.desktop +++ b/snowblocks/xdg/applications/atom.desktop @@ -1,3 +1,10 @@ +# Copyright (C) 2016-present Arctic Ice Studio +# Copyright (C) 2016-present Sven Greb + +# Project: igloo +# Repository: https://github.com/arcticicestudio/igloo +# License: MIT + [Desktop Entry] Type=Application Name=Atom diff --git a/snowblocks/xdg/applications/evolution.desktop b/snowblocks/xdg/applications/evolution.desktop index 525b3c7..8304cc9 100644 --- a/snowblocks/xdg/applications/evolution.desktop +++ b/snowblocks/xdg/applications/evolution.desktop @@ -1,3 +1,10 @@ +# Copyright (C) 2016-present Arctic Ice Studio +# Copyright (C) 2016-present Sven Greb + +# Project: igloo +# Repository: https://github.com/arcticicestudio/igloo +# License: MIT + [Desktop Entry] Type=Application Name=Evolution diff --git a/snowblocks/xdg/applications/gpick.desktop b/snowblocks/xdg/applications/gpick.desktop index ed45d29..6e8d441 100644 --- a/snowblocks/xdg/applications/gpick.desktop +++ b/snowblocks/xdg/applications/gpick.desktop @@ -1,3 +1,10 @@ +# Copyright (C) 2016-present Arctic Ice Studio +# Copyright (C) 2016-present Sven Greb + +# Project: igloo +# Repository: https://github.com/arcticicestudio/igloo +# License: MIT + [Desktop Entry] Type=Application Name=Gpick diff --git a/snowblocks/xdg/applications/gtkhash.desktop b/snowblocks/xdg/applications/gtkhash.desktop index 3d8530e..1296dd2 100644 --- a/snowblocks/xdg/applications/gtkhash.desktop +++ b/snowblocks/xdg/applications/gtkhash.desktop @@ -1,3 +1,10 @@ +# Copyright (C) 2016-present Arctic Ice Studio +# Copyright (C) 2016-present Sven Greb + +# Project: igloo +# Repository: https://github.com/arcticicestudio/igloo +# License: MIT + [Desktop Entry] Type=Application Name=GtkHash diff --git a/snowblocks/xdg/applications/minecraft.desktop b/snowblocks/xdg/applications/minecraft.desktop index 018e88a..027b4c6 100644 --- a/snowblocks/xdg/applications/minecraft.desktop +++ b/snowblocks/xdg/applications/minecraft.desktop @@ -1,3 +1,10 @@ +# Copyright (C) 2016-present Arctic Ice Studio +# Copyright (C) 2016-present Sven Greb + +# Project: igloo +# Repository: https://github.com/arcticicestudio/igloo +# License: MIT + [Desktop Entry] Type=Application Name=Minecraft diff --git a/snowblocks/xdg/applications/org.gnome.Screenshot.desktop b/snowblocks/xdg/applications/org.gnome.Screenshot.desktop index 0a7ac4a..d62562d 100644 --- a/snowblocks/xdg/applications/org.gnome.Screenshot.desktop +++ b/snowblocks/xdg/applications/org.gnome.Screenshot.desktop @@ -1,3 +1,10 @@ +# Copyright (C) 2016-present Arctic Ice Studio +# Copyright (C) 2016-present Sven Greb + +# Project: igloo +# Repository: https://github.com/arcticicestudio/igloo +# License: MIT + [Desktop Entry] Type=Application Name=Screenshot diff --git a/snowblocks/xdg/applications/org.gnome.gedit.desktop b/snowblocks/xdg/applications/org.gnome.gedit.desktop index e4a22a1..6c2cb2f 100644 --- a/snowblocks/xdg/applications/org.gnome.gedit.desktop +++ b/snowblocks/xdg/applications/org.gnome.gedit.desktop @@ -1,3 +1,10 @@ +# Copyright (C) 2016-present Arctic Ice Studio +# Copyright (C) 2016-present Sven Greb + +# Project: igloo +# Repository: https://github.com/arcticicestudio/igloo +# License: MIT + [Desktop Entry] Type=Application Name=Gedit diff --git a/snowblocks/xdg/applications/shotwell-viewer.desktop b/snowblocks/xdg/applications/shotwell-viewer.desktop index 86a0f30..0005d09 100644 --- a/snowblocks/xdg/applications/shotwell-viewer.desktop +++ b/snowblocks/xdg/applications/shotwell-viewer.desktop @@ -1,3 +1,10 @@ +# Copyright (C) 2016-present Arctic Ice Studio +# Copyright (C) 2016-present Sven Greb + +# Project: igloo +# Repository: https://github.com/arcticicestudio/igloo +# License: MIT + [Desktop Entry] Type=Application Name=Shotwell Viewer diff --git a/snowblocks/xdg/autostart/dropbox.desktop b/snowblocks/xdg/autostart/dropbox.desktop index ca30367..b81e884 100644 --- a/snowblocks/xdg/autostart/dropbox.desktop +++ b/snowblocks/xdg/autostart/dropbox.desktop @@ -1,3 +1,10 @@ +# Copyright (C) 2016-present Arctic Ice Studio +# Copyright (C) 2016-present Sven Greb + +# Project: igloo +# Repository: https://github.com/arcticicestudio/igloo +# License: MIT + [Desktop Entry] Type=Application Name=Dropbox diff --git a/snowblocks/xdg/autostart/plank.desktop.archbook b/snowblocks/xdg/autostart/plank.desktop.archbook index cc0f0d0..1a258a5 100644 --- a/snowblocks/xdg/autostart/plank.desktop.archbook +++ b/snowblocks/xdg/autostart/plank.desktop.archbook @@ -1,3 +1,10 @@ +# Copyright (C) 2016-present Arctic Ice Studio +# Copyright (C) 2016-present Sven Greb + +# Project: igloo +# Repository: https://github.com/arcticicestudio/igloo +# License: MIT + [Desktop Entry] Name=Plank Type=Application diff --git a/snowblocks/xdg/autostart/plank.desktop.igloo b/snowblocks/xdg/autostart/plank.desktop.igloo index 73910b7..c91a03c 100644 --- a/snowblocks/xdg/autostart/plank.desktop.igloo +++ b/snowblocks/xdg/autostart/plank.desktop.igloo @@ -1,3 +1,10 @@ +# Copyright (C) 2016-present Arctic Ice Studio +# Copyright (C) 2016-present Sven Greb + +# Project: igloo +# Repository: https://github.com/arcticicestudio/igloo +# License: MIT + [Desktop Entry] Name=Plank Type=Application diff --git a/snowblocks/xdg/gtk-3.0/settings.ini b/snowblocks/xdg/gtk-3.0/settings.ini index bed147b..564e432 100644 --- a/snowblocks/xdg/gtk-3.0/settings.ini +++ b/snowblocks/xdg/gtk-3.0/settings.ini @@ -1,5 +1,5 @@ -# Copyright (c) 2016-2017 Arctic Ice Studio -# Copyright (c) 2016-2017 Sven Greb +# Copyright (C) 2016-present Arctic Ice Studio +# Copyright (C) 2016-present Sven Greb # Project: igloo # Repository: https://github.com/arcticicestudio/igloo diff --git a/snowblocks/xdg/user-dirs.conf b/snowblocks/xdg/user-dirs.conf index f890a67..4590c76 100644 --- a/snowblocks/xdg/user-dirs.conf +++ b/snowblocks/xdg/user-dirs.conf @@ -1,5 +1,5 @@ -# Copyright (c) 2016-2017 Arctic Ice Studio -# Copyright (c) 2016-2017 Sven Greb +# Copyright (C) 2016-present Arctic Ice Studio +# Copyright (C) 2016-present Sven Greb # Project: igloo # Repository: https://github.com/arcticicestudio/igloo diff --git a/snowblocks/xdg/user-dirs.dirs b/snowblocks/xdg/user-dirs.dirs index faaa87e..f9e5811 100644 --- a/snowblocks/xdg/user-dirs.dirs +++ b/snowblocks/xdg/user-dirs.dirs @@ -1,5 +1,5 @@ -# Copyright (c) 2016-2017 Arctic Ice Studio -# Copyright (c) 2016-2017 Sven Greb +# Copyright (C) 2016-present Arctic Ice Studio +# Copyright (C) 2016-present Sven Greb # Project: igloo # Repository: https://github.com/arcticicestudio/igloo diff --git a/snowflakes/systemd/hooks/system-sleep/igloo-mbp-lid-suspend.sh.archbook b/snowflakes/systemd/hooks/system-sleep/igloo-mbp-lid-suspend.sh.archbook index f28e559..678fa9f 100644 --- a/snowflakes/systemd/hooks/system-sleep/igloo-mbp-lid-suspend.sh.archbook +++ b/snowflakes/systemd/hooks/system-sleep/igloo-mbp-lid-suspend.sh.archbook @@ -1,6 +1,7 @@ #!/bin/sh -# Copyright (c) 2016-2017 Arctic Ice Studio -# Copyright (c) 2016-2017 Sven Greb + +# Copyright (C) 2016-present Arctic Ice Studio +# Copyright (C) 2016-present Sven Greb # Project: igloo # Repository: https://github.com/arcticicestudio/igloo diff --git a/snowflakes/systemd/units/system/igloo-mbp-lid-suspend.service.archbook b/snowflakes/systemd/units/system/igloo-mbp-lid-suspend.service.archbook index 772f84c..9107902 100644 --- a/snowflakes/systemd/units/system/igloo-mbp-lid-suspend.service.archbook +++ b/snowflakes/systemd/units/system/igloo-mbp-lid-suspend.service.archbook @@ -1,5 +1,5 @@ -# Copyright (c) 2016-2017 Arctic Ice Studio -# Copyright (c) 2016-2017 Sven Greb +# Copyright (C) 2016-present Arctic Ice Studio +# Copyright (C) 2016-present Sven Greb # Project: igloo # Repository: https://github.com/arcticicestudio/igloo diff --git a/snowflakes/udev/rules/igloo-udev-logitech-r400-presenter.hwdb b/snowflakes/udev/rules/igloo-udev-logitech-r400-presenter.hwdb index 171812b..6b8505b 100644 --- a/snowflakes/udev/rules/igloo-udev-logitech-r400-presenter.hwdb +++ b/snowflakes/udev/rules/igloo-udev-logitech-r400-presenter.hwdb @@ -1,5 +1,5 @@ -# Copyright (c) 2016-present Arctic Ice Studio -# Copyright (c) 2016-present Sven Greb +# Copyright (C) 2016-present Arctic Ice Studio +# Copyright (C) 2016-present Sven Greb # Project: igloo # Repository: https://github.com/arcticicestudio/igloo From fd258eb5f3280a59854e6a6fff53f62120adeb20 Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Sat, 15 Sep 2018 14:58:59 +0200 Subject: [PATCH 123/214] Add macOS support for GPG MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit > Changed the default socket file paths. There was a problem where the `gpg-agent` was not able to create the socket files within the `~/.gnupg` folder that is symlinked to the gocryptfs (1) container to securely (encrypted) store the GPG keys: ``` gpg: can’t connect to the agent: IPC connect call failed ``` This might be caused by either the macOS filesystem (APFS) that doesn't support the creation of sockets (it works fine on other Arch Linux hosts like `igloo`) or by restrictions due to read/write permissions that are not passed through. This solution/workaround is to change the default absolute file paths of the socket files: 1. Created a `S.gpg-agent` and `S.gpg-agent.ssh` file manually in the `$GNUPGPHOME` folder (defaults to `~/.gnupg`). 2. Added the `extra-socket` and `browser-socket` options in the `gpg-agent.conf` file with the desired paths. The created `S.gpg-agent` and `S.gpg-agent.ssh` files allow to use values of environment variables via string interpolation (2), e.g. `${HOME}`. NOTE: It is important to make sure that the target folder exists and the permissions are set to 700! > macOS pinentry tool Set the `pinentry-programm` option in the `gpg-agent.conf` file to use pinentry-mac (3). Note that this requires the Homebrew formula pinentry-mac (4) to be installed! ```conf pinentry-program /usr/local/bin/pinentry-mac ``` > More references * „gpg: can’t connect to the agent: IPC connect call failed“ (5) * GNUPG bugtracker - “gpg-agent 2.1 socket and nfs /home“ (6) * „How to configure GnuPG's S.gpg-agent socket location?“ (7) References: (1) https://github.com/rfjakob/gocryptfs (2) https://en.wikipedia.org/wiki/String_interpolation (3) https://github.com/GPGTools/pinentry-mac (4) https://formulae.brew.sh/formula/pinentry-mac (5) https://michaelheap.com/gpg-cant-connect-to-the-agent-ipc-connect-call-failed (6) https://dev.gnupg.org/T1752 (7) https://askubuntu.com/a/1053594 Epic: GH-131 Closes GH-132 --- snowblocks/gpg/README.md | 77 ++++++++++++++++++++++++++++ snowblocks/gpg/S.gpg-agent | 2 + snowblocks/gpg/S.gpg-agent.ssh | 2 + snowblocks/gpg/gpg-agent.iceowl.conf | 21 ++++++++ snowblocks/gpg/snowblock.json | 21 +++++++- 5 files changed, 122 insertions(+), 1 deletion(-) create mode 100644 snowblocks/gpg/README.md create mode 100644 snowblocks/gpg/S.gpg-agent create mode 100644 snowblocks/gpg/S.gpg-agent.ssh create mode 100644 snowblocks/gpg/gpg-agent.iceowl.conf diff --git a/snowblocks/gpg/README.md b/snowblocks/gpg/README.md new file mode 100644 index 0000000..7a01163 --- /dev/null +++ b/snowblocks/gpg/README.md @@ -0,0 +1,77 @@ +# GnuPG - The GNU Privacy Guard + +> [GnuPG][] is a complete and free implementation of the OpenPGP standard as defined by [RFC4880][] (also known as PGP). + +## Troubleshooting + +### Fix failed IPC connection call on macOS + +There is a problem where the `gpg-agent` is not able to create the socket files within the `~/.gnupg` folder that is symlinked to the [gocryptfs][] container (to securely store the GPG keys encrypted): + +```raw +gpg: can’t connect to the agent: IPC connect call failed +``` + +See the „igloosync-dropbox“ setup from the [systemd][gh-igloo-snowblock-systemd] and [launchd][gh-igloo-snowblock-launchd] setup snowblocks. + +The error might be caused by either the macOS filesystem (APFS) that doesn't support the creation of sockets (it works fine on other Arch Linux hosts like `igloo`) or by restrictions due to read/write permissions that are not passed through. + +One solution/workaround is to change the default **absolute** file paths of the socket files by + +1. creating a `S.gpg-agent` and `S.gpg-agent.ssh` file manually in the `$GNUPGPHOME` folder (defaults to `~/.gnupg`). +2. adding the `extra-socket` and `browser-socket` options in the `gpg-agent.conf` file with the desired paths. + +**NOTE**: The created `S.gpg-agent` and `S.gpg-agent.ssh` files allow to use values of environment variables via [string interpolation][wikipedia-string-interpol], e.g. `${HOME}`. + +###### `S.gpg-agent` + +```raw +%Assuan% +socket=${HOME}/path/to/S.gpg-agent +``` + +###### `S.gpg-agent.ssh` + +```raw +%Assuan% +socket=${HOME}/path/to/S.gpg-agent.ssh +``` + +###### `gpg-agent.conf` + +```conf +# ... +# Disable the usage of the default/standard sockets. +no-use-standard-socket + +# Set the cutom paths of the socket files. +extra-socket /path/to/S.gpg-agent.extra +browser-socket /path/to/S.gpg-agent.browser +# ... +``` + +**NOTE**: It is important to make sure that the **target folder exists** and the **permissions** are set to `700`! + +```sh +chmod 700 ~/path/to/target/folder +``` + +See the [references](#references) for more information and details. + +## References + +**Fix failed IPC connection call on macOS** + +* [gpg: can’t connect to the agent: IPC connect call failed][ref-blog-michaelheap-ipc-connect-fail] +* [GNUPG bugtracker: “gpg-agent 2.1 socket and nfs /home“][ref-gnupg-bugtracker-t1752] +* [How to configure GnuPG's S.gpg-agent socket location?]([ref-askubuntu-gpg-socket]) + +[gnupg]: https://www.gnupg.org +[gh-igloo-snowblock-launchd]: https://github.com/arcticicestudio/igloo/tree/develop/snowblocks/launchd +[gh-igloo-snowblock-systemd]: https://github.com/arcticicestudio/igloo/tree/develop/snowblocks/systemd +[gocryptfs]: https://github.com/rfjakob/gocryptfs +[ref-askubuntu-gpg-socket]: https://askubuntu.com/a/1053594 +[ref-blog-michaelheap-ipc-connect-fail]: https://michaelheap.com/gpg-cant-connect-to-the-agent-ipc-connect-call-failed +[ref-gnupg-bugtracker-t1752]: https://dev.gnupg.org/T1752 +[rfc4880]: https://www.ietf.org/rfc/rfc4880.txt +[wikipedia-string-interpol]: https://en.wikipedia.org/wiki/String_interpolation diff --git a/snowblocks/gpg/S.gpg-agent b/snowblocks/gpg/S.gpg-agent new file mode 100644 index 0000000..01247c7 --- /dev/null +++ b/snowblocks/gpg/S.gpg-agent @@ -0,0 +1,2 @@ +%Assuan% +socket=${HOME}/.gnupg-socket-box/S.gpg-agent diff --git a/snowblocks/gpg/S.gpg-agent.ssh b/snowblocks/gpg/S.gpg-agent.ssh new file mode 100644 index 0000000..37e00f0 --- /dev/null +++ b/snowblocks/gpg/S.gpg-agent.ssh @@ -0,0 +1,2 @@ +%Assuan% +socket=${HOME}/.gnupg-socket-box/S.gpg-agent.ssh diff --git a/snowblocks/gpg/gpg-agent.iceowl.conf b/snowblocks/gpg/gpg-agent.iceowl.conf new file mode 100644 index 0000000..ba945e2 --- /dev/null +++ b/snowblocks/gpg/gpg-agent.iceowl.conf @@ -0,0 +1,21 @@ +# Copyright (C) 2016-present Arctic Ice Studio +# Copyright (C) 2016-present Sven Greb + +# Project: igloo +# Repository: https://github.com/arcticicestudio/igloo +# License: MIT +# References: +# https://www.gnupg.org/documentation/manuals/gnupg/ +# https://wiki.archlinux.org/index.php/GnuPG +# gpg-agent(1) +# gpgconf(1) + +# Set the tool for password prompts. +pinentry-program /usr/local/bin/pinentry-mac + +log-file /Users/sgreb/.var/log/igloo/gpg/gpg-agent.log + +# Disable the usage of the default/standard sockets and set custom paths for the socket files. +no-use-standard-socket +extra-socket /Users/sgreb/.gnupg-socket-box/S.gpg-agent.extra +browser-socket /Users/sgreb/.gnupg-socket-box/S.gpg-agent.browser diff --git a/snowblocks/gpg/snowblock.json b/snowblocks/gpg/snowblock.json index 07843a8..6644439 100644 --- a/snowblocks/gpg/snowblock.json +++ b/snowblocks/gpg/snowblock.json @@ -1,12 +1,31 @@ [ { - "clean": ["~/.gnupg"] + "clean": [ + "~/.gnupg", + "~/.gnupg-socket-box" + ] }, { "link": { + "~/.gnupg/gpg-agent.conf": { + "create": true, + "hosts": { + "iceowl": "gpg-agent.iceowl.conf" + } + }, "~/.gnupg/gpg.conf": { "create": true, "path": "gpg.conf" + }, + "~/.gnupg-socket-box/S.gpg-agent": { + "hosts": { + "iceowl": "S.gpg-agent" + } + }, + "~/.gnupg-socket-box/S.gpg-agent.ssh": { + "hosts": { + "iceowl": "S.gpg-agent.ssh" + } } } } From 6cf24792fcacbf249fc4f31022bd9603a4a77452 Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Sat, 15 Sep 2018 16:13:31 +0200 Subject: [PATCH 124/214] launchd for igloosync-dropbox setup with gocryptfs (macOS support) Created a new snowblock for launchd (1) snowblock includes a user agent defining a job to auto-mount the `sync` gocryptfs (2) volume located in the Dropbox (3) folder receiving the password stored in the macOS Keychain (4) via the macOS builtin system CLI tool `security`. It also includes a documentation to describe the requirements for the `com.arcticicestudio.igloo.launchd.igloosync` agent. It consists of information about dependencies and how to create the required `gocryptfs` password stored- and received via the macOS builtin system CLI tool `security`. Note that this is a macOS specific snowblock and therefore the `com.arcticicestudio.igloo.launchd.igloosync-dropbox.plist` agent and script file will only be linked for the `iceowl` host. References: (1) https://wiki.freebsd.org/launchd (2) https://github.com/rfjakob/gocryptfs (3) https://www.dropbox.com (4) https://support.apple.com/guide/keychain-access/welcome/mac * http://www.launchd.info * launchd(1) * launchd.plist(5) * security(1) Epic: GH-131 Related to GH-58 Closes GH-133 --- snowblocks/launchd/README.md | 52 +++++++++++++++++++ ...udio.igloo.launchd.igloosync-dropbox.plist | 29 +++++++++++ .../launchd/igloosync/igloosync-dropbox.sh | 43 +++++++++++++++ snowblocks/launchd/snowblock.json | 23 ++++++++ 4 files changed, 147 insertions(+) create mode 100644 snowblocks/launchd/README.md create mode 100644 snowblocks/launchd/com/arcticicestudio/igloo/launchd/igloosync/com.arcticicestudio.igloo.launchd.igloosync-dropbox.plist create mode 100755 snowblocks/launchd/com/arcticicestudio/igloo/launchd/igloosync/igloosync-dropbox.sh create mode 100644 snowblocks/launchd/snowblock.json diff --git a/snowblocks/launchd/README.md b/snowblocks/launchd/README.md new file mode 100644 index 0000000..d2a3f6d --- /dev/null +++ b/snowblocks/launchd/README.md @@ -0,0 +1,52 @@ +# launchd + +> In computing, [launchd][], a unified service-management framework, starts, stops and manages daemons, applications, processes, and scripts in macOS. + +## igloosync-dropbox setup on macOS + +This snowblock includes a user agent defining a job to auto-mount the `sync` [gocryptfs][] volume/container located in the [Dropbox][] folder receiving the password stored in the [macOS Keychain][apple-doc-keychain] via the macOS builtin system CLI tool `security`. +It requires the [gocryptfs][brew-gocryptfs] forumla and [dropbox][brew-cask-dropbox] cask to be installed. + +### macOS Keychain setup + +Store the gocryptfs volume/container password in the macOS [Keychain][apple-doc-keychain] app: + +```sh +security add-generic-password -a sgreb -l igloosync-dropbox -s igloosync -T $(brew --prefix gocryptfs)/bin/gocryptfs -w +# Example: security add-generic-password -a sgreb -l igloosync-dropbox -s igloosync -T $(brew --prefix gocryptfs)/bin/gocryptfs -w +``` + +* `-a` - Specifies the account name +* `-l` - Specifies the label (if omitted, service name is used as default label) +* `-s` - Specifies the service name +* `-T` - Specifies the application which may have access to this item +* `-w` - Show an interactive prompt to pass the password to be added + +See `security help add-generic-password` and security(1) for a detailed documentation of the available commands and options. + +The password can then be received by running + +```sh +security find-generic-password -l igloosync-dropbox -w +``` + +where the `-w` flag prints only the password to stdout. + +### launchd service/agent and script + +> For launchd tutorials, documentations and cookbooks see [launchd.info][launchd.info] and and manpages `launchd(1)` and `launchd.plist(5)`. + +Create the service task as shell script and corresponding launchd service and place it in the folder for user agents: + +```sh +mkdir -p ~/Library/LaunchAgents +cp .plist ~/Library/LaunchAgents +``` + + +[apple-doc-keychain]: https://support.apple.com/guide/keychain-access/welcome/mac +[brew-cask-dropbox]: https://github.com/Homebrew/homebrew-cask/blob/master/Casks/dropbox.rb +[brew-gocryptfs]: https://formulae.brew.sh/formula/gocryptfs +[gocryptfs]: https://github.com/rfjakob/gocryptfs +[launchd]: https://wiki.freebsd.org/launchd +[launchd.info]: http://www.launchd.info diff --git a/snowblocks/launchd/com/arcticicestudio/igloo/launchd/igloosync/com.arcticicestudio.igloo.launchd.igloosync-dropbox.plist b/snowblocks/launchd/com/arcticicestudio/igloo/launchd/igloosync/com.arcticicestudio.igloo.launchd.igloosync-dropbox.plist new file mode 100644 index 0000000..9564f0b --- /dev/null +++ b/snowblocks/launchd/com/arcticicestudio/igloo/launchd/igloosync/com.arcticicestudio.igloo.launchd.igloosync-dropbox.plist @@ -0,0 +1,29 @@ + + + + + + Label + com.arcticicestudio.igloo.launchd.igloosync + Program + /Users/sgreb/.config/launchd/tasks/igloosync-dropbox.sh + RunAtLoad + + StandardErrorPath + /Users/sgreb/.var/log/igloo/launchd/igloosync-dropbox.error.log + StandardOutPath + /Users/sgreb/.var/log/igloo/launchd/igloosync-dropbox.log + + diff --git a/snowblocks/launchd/com/arcticicestudio/igloo/launchd/igloosync/igloosync-dropbox.sh b/snowblocks/launchd/com/arcticicestudio/igloo/launchd/igloosync/igloosync-dropbox.sh new file mode 100755 index 0000000..4e4d9e8 --- /dev/null +++ b/snowblocks/launchd/com/arcticicestudio/igloo/launchd/igloosync/igloosync-dropbox.sh @@ -0,0 +1,43 @@ +#!/usr/bin/env bash + +# Copyright (C) 2016-present Arctic Ice Studio +# Copyright (C) 2016-present Sven Greb + +# Project: igloo +# Repository: https://github.com/arcticicestudio/igloo +# License: MIT +# References: +# https://github.com/rfjakob/gocryptfs +# security(1) + +set -eo pipefail + +cleanup() { + unset -f mount +} + +mount() { + local brew="/usr/local/bin/brew" + local gocryptfs="$($brew --prefix gocryptfs)/bin/gocryptfs" + local container="$HOME/cloud/.dropbox/Dropbox/sync" + local mountpoint="$HOME/cloud/dropbox" + local extpass_command="security find-generic-password -l igloosync-dropbox -w" + + if [ ! -f $brew ]; then + echo "Homebrew is not installed or available in PATH!" + exit 1 + fi + + if [ -f $gocryptfs ]; then + $($gocryptfs -allow_other -q -extpass="$extpass_command" "$container" "$mountpoint") + else + echo "gocryptfs is not installed or available in PATH!" + exit 1 + fi +} + +trap 'printf "User aborted.\n" && exit 1' SIGINT SIGTERM +trap cleanup EXIT + +mount $@ +exit 0 diff --git a/snowblocks/launchd/snowblock.json b/snowblocks/launchd/snowblock.json new file mode 100644 index 0000000..657ab1b --- /dev/null +++ b/snowblocks/launchd/snowblock.json @@ -0,0 +1,23 @@ +[ + { + "clean": ["~/Library/LaunchAgents"] + }, + { + "link": { + "~/Library/LaunchAgents/com.arcticicestudio.igloo.launchd.igloosync-dropbox.plist": { + "create": true, + "force": true, + "hosts": { + "iceowl": "com/arcticicestudio/igloo/launchd/igloosync/com.arcticicestudio.igloo.launchd.igloosync-dropbox.plist" + } + }, + "~/Library/LaunchAgents/igloosync-dropbox.sh": { + "create": true, + "force": true, + "hosts": { + "iceowl": "com/arcticicestudio/igloo/launchd/igloosync/igloosync-dropbox.sh" + } + } + } + } +] From 47af7adc269820251b8a016880d6f3700dec116d Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Sat, 15 Sep 2018 16:43:53 +0200 Subject: [PATCH 125/214] taskopen workaround support for macOS MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The management of installed Perl modules (1) on macOS is not as simple and well thought through like with package managers on Linux systems, e.g. via pacman (2) on Arch Linux (3). There are problems when is comes to configuring the runtime path the modules have been installed to even when using the most popular module manager called cpanminus (4). This causes the Taskwarrior (5) plugin taskopen (6) fail to load because the Perl core module `JSON` can't be found and loaded. As a workaround a custom script has been implemented to create and open a attached note of an task: 1. Used the `_get` (7) function of the Taskwarrior DOM API (8) to extract any stored piece of information of an task. This allows to receive the UUID of an task (9). 2. Created a custom `on` (open note) Taskwarrior alias (10) to run the implemented custom script via the `execute` command. The logic of the script follows the same like taskopen uses for default notes: * Using the UUID of an task (TODO) as the note filename. * Simply passing the file to an editor (in this case Atom (11)) which will… * …creates a new file if it doesn't exist yet. * …opens the file if it already exists. Note that this script is not limited to macOS but can also be used for any other Linux hosts! References: (1) http://www.cpan.org/modules (2) https://wiki.archlinux.org/index.php/Pacman (3) https://archlinux.org (4) https://github.com/miyagawa/cpanminus (5) https://taskwarrior.org (6) https://github.com/ValiValpas/taskopen (7) https://taskwarrior.org/docs/commands/_get.html (8) https://taskwarrior.org/docs/dom.html (9) https://taskwarrior.org/docs/ids.html (10) https://taskwarrior.org/docs/terminology.html#alias (11) https://atom.io Epic: #131 Related to #110 Closes GH-134 --- snowblocks/taskwarrior/README.md | 45 ++++++++++++++ snowblocks/taskwarrior/scripts/open-note.sh | 69 +++++++++++++++++++++ snowblocks/taskwarrior/snowblock.json | 5 ++ snowblocks/taskwarrior/taskrc | 1 + 4 files changed, 120 insertions(+) create mode 100644 snowblocks/taskwarrior/README.md create mode 100755 snowblocks/taskwarrior/scripts/open-note.sh diff --git a/snowblocks/taskwarrior/README.md b/snowblocks/taskwarrior/README.md new file mode 100644 index 0000000..bbdf61a --- /dev/null +++ b/snowblocks/taskwarrior/README.md @@ -0,0 +1,45 @@ +# Taskwarrior + +> Taskwarrior is a flexible, fast, and unobtrusive CLI tool to manage your TODOs that does its job and gets out of your way. + +## Extensions + +### taskopen + +The [taskopen][] extension allows to take notes and open URLs with attached to Taskwarrior tasks. + +Next to the `task` binary itself, this Perl script depends on the `JSON` module which can be installed on Arch Linux via the [perl-json][arch-perl-json] package. + +## Troubleshooting + +### taskopen workaround for macOS + +The management of installed [Perl modules][cpan-doc-modules] on macOS is not as simple and well thought through like with package managers on Linux systems, e.g. via [pacman][archw-pacman] on [Arch Linux][archlinux]. There are problems when is comes to configuring the runtime path the modules have been installed to even when using the most popular module manager called [cpanminus][]. +This causes the [Taskwarrior][] plugin [taskopen][] fail to load because the Perl core module `JSON` can't be found and loaded. + +As a workaround a custom script can be implemented to create and open an attached task note: + +1. Use the [`_get`][tw-doc-api-_get] function of the [Taskwarrior DOM API][tw-doc-dom-api] to extract any stored piece of information of an task. This allows to receive the [UUID of an task][tw-doc-ids]. +2. Create a custom `on` (open note) [Taskwarrior alias][tw-doc-alias] to run the implemented custom script via the `execute` command. + +The logic of the script follows the same like taskopen uses for default notes: + +* Use the [UUID of an task][tw-doc-ids] as the note filename. +* Simply pass the file to an editor (in this case [Atom][]) which will… + * …create a new file if it doesn't exist yet. + * …open the file if it already exists. + +Note that **this script is not limited to macOS** but can also be used for any other Linux host! + +[archlinux]: https://archlinux.org +[arch-perl-json]: https://www.archlinux.org/packages/community/any/perl-json +[archw-pacman]: https://wiki.archlinux.org/index.php/Pacman +[atom]: https://atom.io +[cpanminus]: https://github.com/miyagawa/cpanminus +[cpan-doc-modules]: http://www.cpan.org/modules +[taskopen]: https://github.com/ValiValpas/taskopen +[taskwarrior]: https://taskwarrior.org +[tw-doc-alias]: https://taskwarrior.org/docs/terminology.html#alias +[tw-doc-api-_get]: https://taskwarrior.org/docs/commands/_get.html +[tw-doc-dom-api]: https://taskwarrior.org/docs/dom.html +[tw-doc-ids]: https://taskwarrior.org/docs/ids.html diff --git a/snowblocks/taskwarrior/scripts/open-note.sh b/snowblocks/taskwarrior/scripts/open-note.sh new file mode 100755 index 0000000..ce03f11 --- /dev/null +++ b/snowblocks/taskwarrior/scripts/open-note.sh @@ -0,0 +1,69 @@ +#!/usr/bin/env bash + +# Copyright (C) 2016-present Arctic Ice Studio +# Copyright (C) 2016-present Sven Greb + +# Project: igloo +# Repository: https://github.com/arcticicestudio/igloo +# License: MIT +# References: +# https://taskwarrior.org/docs +# https://taskwarrior.org/docs/terminology.html#regex +# taskrc(5) +# task(1) +# https://en.wikibooks.org/wiki/Regular_Expressions/POSIX-Extended_Regular_Expressions + +set -e + +cleanup() { + unset -f log_error validate_parameter get_task_uuid open_notes +} + +log_error() { + printf "\e[31m%s\e[0m\n" "✖ $*" 1>&2 +} + +validate_parameter() { + if [ $# -eq 0 ]; then + log_error "No task IDs specified!" + exit 1 + fi + + local VALID_NUMBER_REGEX="^[0-9]+$" + if ! [[ $1 =~ $VALID_NUMBER_REGEX ]]; then + log_error "Invalid parameter '$1': parameters must be of type number!" + exit 1 + fi +} + +get_task_uuid() { + local task_id=$1 + local uuid="$(task _get $task_id.uuid)" + if [ -z $uuid ]; then + log_error "No task found with for specified ID '$task_id'!" + exit 1 + fi + printf "$uuid" +} + +open_notes() { + declare -a local task_uuids + local task_uuid + local note_path="~/.task/notes" + local editor_cmd="atom -a" + local note_file_ext="md" + + for task_id in $@; do + validate_parameter $task_id + task_uuid="$(get_task_uuid $task_id)" + if ! [ -z $task_uuid ]; then + $editor_cmd "$note_path/$task_uuid.$note_file_ext" + fi + done +} + +trap 'printf "User aborted.\n" && exit 1' SIGINT SIGTERM +trap cleanup EXIT + +open_notes $@ +exit 0 diff --git a/snowblocks/taskwarrior/snowblock.json b/snowblocks/taskwarrior/snowblock.json index e6ec4f8..c8e34c9 100644 --- a/snowblocks/taskwarrior/snowblock.json +++ b/snowblocks/taskwarrior/snowblock.json @@ -38,6 +38,11 @@ "create": true, "force": true, "path": "hooks/on-modify-track-total-active-time.py" + }, + "~/.task/scripts/open-note.sh": { + "create": true, + "force": true, + "path": "scripts/open-note.sh" } } } diff --git a/snowblocks/taskwarrior/taskrc b/snowblocks/taskwarrior/taskrc index d1edb48..2578c21 100644 --- a/snowblocks/taskwarrior/taskrc +++ b/snowblocks/taskwarrior/taskrc @@ -88,3 +88,4 @@ alias.e=edit alias.ls=list alias.mod=modify alias.o=execute taskopen +alias.on=execute "$HOME/.task/scripts/open-note.sh" From 0876c2c952d7cc694f5303291ef3a75adeef998a Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Sat, 15 Sep 2018 17:06:11 +0200 Subject: [PATCH 126/214] Docker with macOS support Created a new snowblock that contains the `~/.docker/config.json` configuration file. The file for the `iceowl` host has been configured to ensure the macOS Keychain is used to store tokens instead of saving them as plain text into the config file. Related to epic GH-131 Closes GH-136 --- snowblocks/docker/README.md | 15 +++++++++++++++ snowblocks/docker/config.iceowl.json | 3 +++ snowblocks/docker/snowblock.json | 16 ++++++++++++++++ 3 files changed, 34 insertions(+) create mode 100644 snowblocks/docker/README.md create mode 100644 snowblocks/docker/config.iceowl.json create mode 100644 snowblocks/docker/snowblock.json diff --git a/snowblocks/docker/README.md b/snowblocks/docker/README.md new file mode 100644 index 0000000..029aa5d --- /dev/null +++ b/snowblocks/docker/README.md @@ -0,0 +1,15 @@ +# Docker + +> Docker is the leader in the containerization market, an open-source project that automates the deployment of software applications inside containers by providing an additional layer of abstraction and automation of operating-system-level virtualization on Linux. + +## Setup + +### macOS Keychain + +To ensure that registry login tokens are stored in the macOS Keychain instead as plain text in the `~/.docker/config.json` file the configuration file must be adjusted: + +```json +{ + "credsStore": "osxkeychain" +} +``` diff --git a/snowblocks/docker/config.iceowl.json b/snowblocks/docker/config.iceowl.json new file mode 100644 index 0000000..a1be8c6 --- /dev/null +++ b/snowblocks/docker/config.iceowl.json @@ -0,0 +1,3 @@ +{ + "credsStore": "osxkeychain" +} diff --git a/snowblocks/docker/snowblock.json b/snowblocks/docker/snowblock.json new file mode 100644 index 0000000..fa874ec --- /dev/null +++ b/snowblocks/docker/snowblock.json @@ -0,0 +1,16 @@ +[ + { + "clean": ["~/.docker"] + }, + { + "link": { + "~/.docker/config.json": { + "create": true, + "force": true, + "hosts": { + "iceowl": "config.iceowl.json" + } + } + } + } +] From 3573a2a275f62b468d6b400d26461cf2acefaa36 Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Sat, 15 Sep 2018 17:21:20 +0200 Subject: [PATCH 127/214] Add iTerm2 snowflake (macOS support) Since Tilix (1) is designed for Linux the most popular macOS terminal emulator iTerm2 (2) will be used as replacement. This snowflake should includes the exported JSON file of the created `igloo` profile. References: (1) https://github.com/gnunn1/tilix (2) https://www.iterm2.com Epic: GH-131 Related to GH-70 Closes GH-135 --- snowflakes/iterm2/profile-igloo.json | 512 +++++++++++++++++++++++++++ 1 file changed, 512 insertions(+) create mode 100644 snowflakes/iterm2/profile-igloo.json diff --git a/snowflakes/iterm2/profile-igloo.json b/snowflakes/iterm2/profile-igloo.json new file mode 100644 index 0000000..d30b513 --- /dev/null +++ b/snowflakes/iterm2/profile-igloo.json @@ -0,0 +1,512 @@ +{ + "Badge Text" : "", + "Working Directory" : "\/Users\/sgreb", + "Prompt Before Closing 2" : 0, + "Selected Text Color" : { + "Red Component" : 0.81214714050292969, + "Color Space" : "Calibrated", + "Blue Component" : 0.89225924015045166, + "Alpha Component" : 1, + "Green Component" : 0.83857882022857666 + }, + "Rows" : 25, + "Ansi 11 Color" : { + "Red Component" : 0.89902019500732422, + "Color Space" : "Calibrated", + "Blue Component" : 0.47280269861221313, + "Alpha Component" : 1, + "Green Component" : 0.75577855110168457 + }, + "Use Italic Font" : true, + "Foreground Color" : { + "Red Component" : 0.81214725971221924, + "Color Space" : "Calibrated", + "Blue Component" : 0.89225912094116211, + "Alpha Component" : 1, + "Green Component" : 0.83857882022857666 + }, + "Right Option Key Sends" : 0, + "Character Encoding" : 4, + "Selection Color" : { + "Red Component" : 0.23306176066398621, + "Color Space" : "Calibrated", + "Blue Component" : 0.34064260125160217, + "Alpha Component" : 1, + "Green Component" : 0.2652154266834259 + }, + "Mouse Reporting" : true, + "Cursor Boost" : 0, + "Ansi 4 Color" : { + "Red Component" : 0.43401443958282471, + "Color Space" : "Calibrated", + "Blue Component" : 0.70459425449371338, + "Alpha Component" : 1, + "Green Component" : 0.56080448627471924 + }, + "Non-ASCII Anti Aliased" : true, + "Sync Title" : true, + "Disable Window Resizing" : true, + "Description" : "Default", + "Close Sessions On End" : true, + "Jobs to Ignore" : [ + "rlogin", + "ssh", + "slogin", + "telnet" + ], + "Scrollback Lines" : 0, + "Scrollback in Alternate Screen" : false, + "Hide After Opening" : false, + "Flashing Bell" : false, + "Cursor Guide Color" : { + "Red Component" : 0.17621420323848724, + "Color Space" : "Calibrated", + "Blue Component" : 0.25300124287605286, + "Alpha Component" : 1, + "Green Component" : 0.19692185521125793 + }, + "BM Growl" : true, + "AWDS Window Directory" : "", + "Ansi 3 Color" : { + "Red Component" : 0.89902019500732422, + "Color Space" : "Calibrated", + "Blue Component" : 0.47280269861221313, + "Alpha Component" : 1, + "Green Component" : 0.75577855110168457 + }, + "Use Non-ASCII Font" : false, + "Link Color" : { + "Red Component" : 0.87367779016494751, + "Color Space" : "Calibrated", + "Blue Component" : 0.92620980739593506, + "Alpha Component" : 1, + "Green Component" : 0.8916594386100769 + }, + "Shortcut" : "", + "Background Image Location" : "", + "Bold Color" : { + "Red Component" : 0.90727746486663818, + "Color Space" : "Calibrated", + "Blue Component" : 0.94574689865112305, + "Alpha Component" : 1, + "Green Component" : 0.92092084884643555 + }, + "Use Cursor Guide" : false, + "Unlimited Scrollback" : true, + "Allow Title Setting" : false, + "Custom Command" : "No", + "AWDS Tab Option" : "Recycle", + "Keyboard Map" : { + "0xf728-0x80000" : { + "Action" : 10, + "Text" : "d" + }, + "0xf702-0x280000" : { + "Action" : 10, + "Text" : "b" + }, + "0xf70d-0x20000" : { + "Action" : 10, + "Text" : "[21;2~" + }, + "0x7f-0x80000" : { + "Action" : 11, + "Text" : "0x1b 0x7f" + }, + "0xf708-0x20000" : { + "Action" : 10, + "Text" : "[15;2~" + }, + "0x33-0x40000" : { + "Action" : 11, + "Text" : "0x1b" + }, + "0xf703-0x260000" : { + "Action" : 10, + "Text" : "[1;6C" + }, + "0xf729-0x20000" : { + "Action" : 10, + "Text" : "[1;2H" + }, + "0xf702-0x260000" : { + "Action" : 10, + "Text" : "[1;6D" + }, + "0x38-0x40000" : { + "Action" : 11, + "Text" : "0x7f" + }, + "0xf72b-0x40000" : { + "Action" : 10, + "Text" : "[1;5F" + }, + "0xf70c-0x20000" : { + "Action" : 10, + "Text" : "[20;2~" + }, + "0xf701-0x260000" : { + "Action" : 10, + "Text" : "[1;6B" + }, + "0x32-0x40000" : { + "Action" : 11, + "Text" : "0x00" + }, + "0xf707-0x20000" : { + "Action" : 10, + "Text" : "[1;2S" + }, + "0xf703-0x240000" : { + "Text" : "f", + "Action" : 10 + }, + "0xf700-0x260000" : { + "Action" : 10, + "Text" : "[1;6A" + }, + "0xf702-0x240000" : { + "Text" : "b", + "Action" : 10 + }, + "0x37-0x40000" : { + "Action" : 11, + "Text" : "0x1f" + }, + "0x3-0x200000" : { + "Action" : 11, + "Text" : "0xd" + }, + "0xf701-0x240000" : { + "Action" : 10, + "Text" : "[1;5B" + }, + "0xf70b-0x20000" : { + "Action" : 10, + "Text" : "[19;2~" + }, + "0xf703-0x220000" : { + "Action" : 10, + "Text" : "[1;2C" + }, + "0xf739-0x0" : { + "Action" : 13, + "Text" : "" + }, + "0xf728-0x0" : { + "Action" : 11, + "Text" : "0x4" + }, + "0xf706-0x20000" : { + "Action" : 10, + "Text" : "[1;2R" + }, + "0xf700-0x240000" : { + "Action" : 10, + "Text" : "[1;5A" + }, + "0xf702-0x220000" : { + "Action" : 10, + "Text" : "[1;2D" + }, + "0x36-0x40000" : { + "Action" : 11, + "Text" : "0x1e" + }, + "0xf70f-0x20000" : { + "Action" : 10, + "Text" : "[24;2~" + }, + "0xf701-0x220000" : { + "Action" : 10, + "Text" : "[1;2B" + }, + "0xf70a-0x20000" : { + "Action" : 10, + "Text" : "[18;2~" + }, + "0xf729-0x40000" : { + "Action" : 10, + "Text" : "[1;5H" + }, + "0xf72b-0x20000" : { + "Action" : 10, + "Text" : "[1;2F" + }, + "0xf700-0x220000" : { + "Action" : 10, + "Text" : "[1;2A" + }, + "0x30-0x200000" : { + "Action" : 12, + "Text" : "0" + }, + "0xf705-0x20000" : { + "Action" : 10, + "Text" : "[1;2Q" + }, + "0x31-0x200000" : { + "Action" : 12, + "Text" : "1" + }, + "0x33-0x200000" : { + "Action" : 12, + "Text" : "3" + }, + "0x35-0x40000" : { + "Action" : 11, + "Text" : "0x1d" + }, + "0x34-0x200000" : { + "Action" : 12, + "Text" : "4" + }, + "0x32-0x200000" : { + "Action" : 12, + "Text" : "2" + }, + "0x35-0x200000" : { + "Action" : 12, + "Text" : "5" + }, + "0x36-0x200000" : { + "Action" : 12, + "Text" : "6" + }, + "0x37-0x200000" : { + "Action" : 12, + "Text" : "7" + }, + "0x2d-0x40000" : { + "Action" : 11, + "Text" : "0x1f" + }, + "0x38-0x200000" : { + "Action" : 12, + "Text" : "8" + }, + "0x2a-0x200000" : { + "Action" : 12, + "Text" : "*" + }, + "0x39-0x200000" : { + "Action" : 12, + "Text" : "9" + }, + "0x2b-0x200000" : { + "Action" : 12, + "Text" : "+" + }, + "0xf70e-0x20000" : { + "Action" : 10, + "Text" : "[23;2~" + }, + "0x2e-0x200000" : { + "Action" : 12, + "Text" : "." + }, + "0x2d-0x200000" : { + "Action" : 12, + "Text" : "-" + }, + "0xf709-0x20000" : { + "Action" : 10, + "Text" : "[17;2~" + }, + "0x7f-0x100000" : { + "Action" : 11, + "Text" : "0x15" + }, + "0x2f-0x200000" : { + "Action" : 12, + "Text" : "\/" + }, + "0xf704-0x20000" : { + "Action" : 10, + "Text" : "[1;2P" + }, + "0x34-0x40000" : { + "Action" : 11, + "Text" : "0x1c" + }, + "0xf703-0x280000" : { + "Action" : 10, + "Text" : "f" + } + }, + "Ansi 14 Color" : { + "Red Component" : 0.49344515800476074, + "Color Space" : "Calibrated", + "Blue Component" : 0.67779052257537842, + "Alpha Component" : 1, + "Green Component" : 0.68614721298217773 + }, + "Ansi 2 Color" : { + "Red Component" : 0.57605421543121338, + "Color Space" : "Calibrated", + "Blue Component" : 0.47597441077232361, + "Alpha Component" : 1, + "Green Component" : 0.7002110481262207 + }, + "Send Code When Idle" : false, + "ASCII Anti Aliased" : true, + "Tags" : [ + + ], + "Ansi 9 Color" : { + "Red Component" : 0.68855589628219604, + "Color Space" : "Calibrated", + "Blue Component" : 0.34168937802314758, + "Alpha Component" : 1, + "Green Component" : 0.29435792565345764 + }, + "Use Bold Font" : true, + "Silence Bell" : false, + "Ansi 12 Color" : { + "Red Component" : 0.43401443958282471, + "Color Space" : "Calibrated", + "Blue Component" : 0.70459425449371338, + "Alpha Component" : 1, + "Green Component" : 0.56080448627471924 + }, + "Window Type" : 0, + "Send New Output Alert" : false, + "Use Bright Bold" : true, + "Cursor Text Color" : { + "Red Component" : 0.17621420323848724, + "Color Space" : "Calibrated", + "Blue Component" : 0.25300124287605286, + "Alpha Component" : 1, + "Green Component" : 0.19692185521125793 + }, + "Default Bookmark" : "No", + "Cursor Color" : { + "Red Component" : 0.81214714050292969, + "Color Space" : "Calibrated", + "Blue Component" : 0.89225924015045166, + "Alpha Component" : 1, + "Green Component" : 0.83857882022857666 + }, + "Ansi 1 Color" : { + "Red Component" : 0.68855589628219604, + "Color Space" : "Calibrated", + "Blue Component" : 0.34168937802314758, + "Alpha Component" : 1, + "Green Component" : 0.29435792565345764 + }, + "Name" : "igloo", + "Blinking Cursor" : true, + "Guid" : "75E3E296-E3A1-4A19-AAB5-55F82E0A9507", + "Idle Code" : 0, + "Ansi 10 Color" : { + "Red Component" : 0.57605421543121338, + "Color Space" : "Calibrated", + "Blue Component" : 0.47597441077232361, + "Alpha Component" : 1, + "Green Component" : 0.7002110481262207 + }, + "Ansi 8 Color" : { + "Red Component" : 0.23306176066398621, + "Color Space" : "Calibrated", + "Blue Component" : 0.34064260125160217, + "Alpha Component" : 1, + "Green Component" : 0.2652154266834259 + }, + "Badge Color" : { + "Red Component" : 0.20252507925033569, + "Color Space" : "Calibrated", + "Blue Component" : 0.29600727558135986, + "Alpha Component" : 0.7057952880859375, + "Green Component" : 0.23046499490737915 + }, + "Semantic History" : { + "editor" : "com.sublimetext.3", + "action" : "best editor", + "text" : "" + }, + "Ambiguous Double Width" : false, + "Blur Radius" : 18.618950269670048, + "Cursor Type" : 1, + "Ansi 0 Color" : { + "Red Component" : 0.17621420323848724, + "Color Space" : "Calibrated", + "Blue Component" : 0.25300124287605286, + "Alpha Component" : 1, + "Green Component" : 0.19692185521125793 + }, + "AWDS Pane Directory" : "", + "Blur" : true, + "Vertical Spacing" : 1, + "Normal Font" : "SourceCodePro-Regular 18", + "Use Underline Color" : false, + "Ansi 7 Color" : { + "Red Component" : 0.87367779016494751, + "Color Space" : "Calibrated", + "Blue Component" : 0.92620980739593506, + "Alpha Component" : 1, + "Green Component" : 0.8916594386100769 + }, + "Place Prompt at First Column" : true, + "AWDS Tab Directory" : "", + "AWDS Pane Option" : "Recycle", + "Command" : "", + "Terminal Type" : "xterm-256color", + "Horizontal Spacing" : 1, + "Reduce Flicker" : false, + "Tab Color" : { + "Red Component" : 0.17621420323848724, + "Color Space" : "Calibrated", + "Blue Component" : 0.25300124287605286, + "Alpha Component" : 1, + "Green Component" : 0.19692185521125793 + }, + "Only The Default BG Color Uses Transparency" : false, + "Option Key Sends" : 0, + "Minimum Contrast" : 0, + "Ansi 15 Color" : { + "Red Component" : 0.90727746486663818, + "Color Space" : "Calibrated", + "Blue Component" : 0.94574689865112305, + "Alpha Component" : 1, + "Green Component" : 0.92092084884643555 + }, + "Open Toolbelt" : false, + "Ansi 6 Color" : { + "Red Component" : 0.4660642147064209, + "Color Space" : "Calibrated", + "Blue Component" : 0.77356863021850586, + "Alpha Component" : 1, + "Green Component" : 0.70216643810272217 + }, + "Transparency" : 0, + "Background Color" : { + "Red Component" : 0.1357133686542511, + "Color Space" : "Calibrated", + "Blue Component" : 0.19183900952339172, + "Alpha Component" : 1, + "Green Component" : 0.15255947411060333 + }, + "Screen" : -1, + "AWDS Window Option" : "No", + "Send Session Ended Alert" : true, + "Non Ascii Font" : "Monaco 12", + "Ansi 13 Color" : { + "Red Component" : 0.64283657073974609, + "Color Space" : "Calibrated", + "Blue Component" : 0.61571133136749268, + "Alpha Component" : 1, + "Green Component" : 0.47487166523933411 + }, + "Columns" : 80, + "Use Tab Color" : true, + "Visual Bell" : false, + "Custom Directory" : "Advanced", + "Ansi 5 Color" : { + "Red Component" : 0.64283657073974609, + "Color Space" : "Calibrated", + "Blue Component" : 0.61571133136749268, + "Alpha Component" : 1, + "Green Component" : 0.47487166523933411 + }, + "Set Local Environment Vars" : false +} From f5d6ff48d1b9685a4d2b146ef645ab5fe41ec4a0 Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Sat, 15 Sep 2018 18:18:58 +0200 Subject: [PATCH 128/214] Python pip (macOS support) Created a new snowblock for pip (1) containing the * `requirements.iceowl.txt` file (2) to track installed packages (3) and their versions of the `iceowl` host and . See the requirements.txt file format documentation (4) for details. * `pip.conf` file (5) for user specific configurations. References: (1) https://pypi.org/project/pip (2) https://pip.pypa.io/en/latest/user_guide/#requirements-files (3) https://packaging.python.org/tutorials/installing-packages/#requirements-files (4) https://pip.pypa.io/en/latest/reference/pip_install/#requirements-file-format (5) https://pip.pypa.io/en/stable/user_guide/#config-file Related to epic GH-131 Closes GH-141 --- snowblocks/pip/pip.conf | 12 ++++++++++++ snowblocks/pip/requirements.iceowl.txt | 26 ++++++++++++++++++++++++++ snowblocks/pip/snowblock.json | 21 +++++++++++++++++++++ 3 files changed, 59 insertions(+) create mode 100644 snowblocks/pip/pip.conf create mode 100644 snowblocks/pip/requirements.iceowl.txt create mode 100644 snowblocks/pip/snowblock.json diff --git a/snowblocks/pip/pip.conf b/snowblocks/pip/pip.conf new file mode 100644 index 0000000..bcbb815 --- /dev/null +++ b/snowblocks/pip/pip.conf @@ -0,0 +1,12 @@ +# Copyright (C) 2016-present Arctic Ice Studio +# Copyright (C) 2016-present Sven Greb + +# Project: igloo +# Repository: https://github.com/arcticicestudio/igloo +# License: MIT +# References: +# https://pypi.org/project/pip +# https://pip.pypa.io/en/stable/user_guide/#config-file + +[global] +timeout = 60 diff --git a/snowblocks/pip/requirements.iceowl.txt b/snowblocks/pip/requirements.iceowl.txt new file mode 100644 index 0000000..ff148fe --- /dev/null +++ b/snowblocks/pip/requirements.iceowl.txt @@ -0,0 +1,26 @@ +# Copyright (C) 2016-present Arctic Ice Studio +# Copyright (C) 2016-present Sven Greb + +# Project: igloo +# Repository: https://github.com/arcticicestudio/igloo +# License: MIT +# References: +# https://pypi.org/project/pip +# https://packaging.python.org/tutorials/installing-packages/#requirements-files +# https://pip.pypa.io/en/latest/reference/pip_install/#requirements-file-format +# https://pip.pypa.io/en/stable/user_guide/#config-file + +# +------+ +# + Core + +# +------+ + +# The base tool to create isolated Python environments. +virtualenv + +# +------+ +# + Apps + +# +------+ + +# Required by the custom hooks of the "taskwarrior" snowblock to interact with Taskwarrior API. +# See https://github.com/arcticicestudio/igloo/tree/develop/snowblocks/taskwarrior for details. +taskw diff --git a/snowblocks/pip/snowblock.json b/snowblocks/pip/snowblock.json new file mode 100644 index 0000000..42574cb --- /dev/null +++ b/snowblocks/pip/snowblock.json @@ -0,0 +1,21 @@ +[ + { + "clean": ["~/.config/pip"] + }, + { + "link": { + "~/.config/pip/pip.conf": { + "create": true, + "force": true, + "path": "pip.conf" + }, + "~/.config/pip/requirements.txt": { + "create": true, + "force": true, + "hosts": { + "iceowl": "requirements.iceowl.txt" + } + } + } + } +] From 38ec12d75509b29f7226446e8584deeabd984fa7 Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Sun, 16 Sep 2018 08:17:25 +0200 Subject: [PATCH 129/214] Buku bookmarks MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This snowflake includes the bookmarks of the used Buku () database… * …exported as HTML file to allow to simply import it using Firefox. * …as shell script used to bootstrap the database. The files are `igloocrypt` encrypted because it includes sensitive data for private SSH server as well as bookmarks related to my job! References: (1) https://github.com/jarun/Buku Closes GH-138 --- snowflakes/buku/README.md | 11 +++++++++++ snowflakes/buku/bookmarks.html.igloocrypt | Bin 0 -> 49830 bytes .../buku/bootstrap-database.sh.igloocrypt | Bin 0 -> 33796 bytes 3 files changed, 11 insertions(+) create mode 100644 snowflakes/buku/README.md create mode 100644 snowflakes/buku/bookmarks.html.igloocrypt create mode 100755 snowflakes/buku/bootstrap-database.sh.igloocrypt diff --git a/snowflakes/buku/README.md b/snowflakes/buku/README.md new file mode 100644 index 0000000..70600ee --- /dev/null +++ b/snowflakes/buku/README.md @@ -0,0 +1,11 @@ +# Buku + +> A powerful bookmark manager written in Python3 with a flexible CLI and private, portable, merge-able SQLite3 database along with seamless GUI integrations. + +## Customized colors + +Buku allows to define [custom colors][gh-buku-wiki-custom-color] according to the same principle like the `LSCOLORS` environment variables of the BSD `ls` command. +The `bash` snowblock already provides a [package configuration for buku colors][gh-igloo-pkg-conf]. + +[gh-buku-wiki-custom-color]: https://github.com/jarun/Buku/wiki/Customize-colors +[gh-igloo-pkg-conf]: https://github.com/arcticicestudio/igloo/blob/develop/snowblocks/bash/config/pkg/buku diff --git a/snowflakes/buku/bookmarks.html.igloocrypt b/snowflakes/buku/bookmarks.html.igloocrypt new file mode 100644 index 0000000000000000000000000000000000000000..b2fc414045f802261ed71724e60c2b3fdb907c78 GIT binary patch literal 49830 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�^PfMANw|R_qA{puLC@?$DfcG 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 literal 0 HcmV?d00001 diff --git a/snowflakes/buku/bootstrap-database.sh.igloocrypt b/snowflakes/buku/bootstrap-database.sh.igloocrypt new file mode 100755 index 0000000000000000000000000000000000000000..3c74f45e176964fe91c875c9eecb5489325e689d GIT binary patch literal 33796 zcmV(rK<>W)M@dveQdv+`03Lp$jNz{E&=RfvYs4*r-@XiIsazkK1W%lLM$a6NvYW^R zcASHP+4WIyh!fbhL8fshEK#ZYxD3NB(VLu-^^At~|HoSQ(F1t%`lv`VT82ByM}I0FRCo!0F8XEnQshk8j$G{4C~V#x5wBzOQ?4L`X-M*WVwr_ zZOL2zJr8-kz@9F7k}g7mVKpE&>s`-zTnABPG==I0Y0=D+eywRrL2gr8$532 z*h8yeBL2NMGhLL49X+9geg4OCUhu*ut-0LrshBN22e9wrHy8nD2_lbJzbk`C32oX7 z7Ukh&Fk*gyd6?;UvApXh3B_LRpzQ7M7RmbuZn@jAdeCYGYElTaUam$sNJe4@A!6Tc zhi@@)?u@C|7&A5#zOmR)w>1*(Ai}+O2+@lQIcllcYZy(d6UrBiO<8#5WFO$`vxXMu zof_Q8hvCD};tGhS;owY%2RMH_;0yjePWu$bo}9b#rOW%csJKfz&ui*!89*H*#V3Mt zFf9_HX&l3V`~)Ek@%lTr37fFs|JXee$^9v}c{>JM&S8$`Ky#sddK}1@Q=t%)jFSSW zI@@8WU$Y;EjbYuydv85-Rhg{AUA^Q@@M=Lo(g=&Z|JtxnPD>D4^nb5UssP#tP!pds zXY#P&YB7RBV6G4vu6VUYQmgg-UA?reAJUulWEpo53A-o7TG`hlMg+R+Tibr3m&%FT zgJWX+xFOY2NN<iuITO3-hS63FxX3 ziD4(%!MPbZj2(;r4TyeE+sTJi zlBg1H(%wiO*L}``RE;z$3LVg)sJJ^x|Ko5+y}3fszzASDT_QPt`G{U1@Ym3dr*f(TNxd~HdidLB5n&#Q{pijd6+ zYp)Ie9E4m;qSmO&&=ER!3W9;h6`KpQuELT*I3^B%XK^w9G%a=uWf0e@ivcTYy(--E zIt0~#n1L2u)b9VvH%_l<*4mXrFn`yABSYNn(+pDRnOW>s>YJZW#!<_tmh!Wl+K0 zT;NY3@B4XzQR9wotq73>{*R|_N8pk5#%bKy@$q5y9UYXLq(X&#XUg%Co)4nH>hM z0HVBq)dHxI;aNrXr97!=N4^ zrqFC;RdFE&?7>71Q%i`s0Irb2F6vu3FiG#zlyhAZjTzngx{U0ZK)455@FE^#PRBW5 zba*eHpnMj82aL6CwJ=K2%-p6A6^CNu^13kg*GD~7c>8tX7cZt1Qa$Zi8MG{G?e`sb zpEGO6%(FMxPV1KLVAv%JGdQUrmm@2Zj}Jy2*H20mSVJ211r-0*0c+zVSG}ZFIgsX5 z%pI2nG9gGUW`HyKy2!nO9aC03v>FxJ(~}&)h3B(CKZnIVWOB714`#UtC^t(69yj>6 zVA!J$M3R}f?{<($=$^`FxE&`9iZ@WJ90&xPjPf2((ke_PtsHD7qck*P9MekG#pO_f zo5j^+*1&y~kdG_Z(cf)Ii>x2B831G>!<0+$HDb#Eibs<##F%o3#u@pAu8N=$wpfYL zcU8XnybE@+Y6`)HWjT>-vK+~_kUAEBXpX42;`j(B1Bf?Vj_jV4ti%811JfvQWPq>) zLNKz$Rth2sKExo@#($S4W7o%fK=doF>I-EK$T`H(SHzrfTLG@C>%rnx$TdS0NhFjl)UwoLP)2 z@sxR)x_`p6>)?Ti)%CE*M69+7QBi)#lsns+C&xY|TDZ8-6lzGE#K@ zbXtu1k>V_*L}e9HjHkI~vCWZV=lV~{xK--Ekw)6ptRwT01JJQ@d%IQGPliRyuU<$+ zi+!c7!R>3AF?cu-Jjf&LtEyigF>Lp8T}4oFg#xe(I${P^aK=G$a13=X24w$gELBLx zLPAakz!nhRPK#<~m)EBMbrxCokh*sV5pRtgi zNji)``_O-5O)%0As&#Bj>zSj)pcjD1%hb6Pa{m7gakJ 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 Qz>9J6x$9_K9V;tLaa}CZ7ytkO literal 0 HcmV?d00001 From 505e3407a08dbeb43eafd9ed1d60a8f6e9a9df68 Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Sun, 16 Sep 2018 21:25:07 +0200 Subject: [PATCH 130/214] Firefox MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Created a new snowblock that adds support for Firefox (1) and Firefox Developer Edition (). It includes… * …the `user.js` (3) file to define and persist almost all preferences for a profile. * …the `profiles.ini` (4) file to configure the name and path of the main profile `igloo`. * …the `ignore-dev-edition-profile` file to fix Bugzilla bug 1098986 (5) that causes Firefox Developer Edition to use the internal default profile regardless of whether another customized profile has been set as default. The problem can be fixed by creating the file within the Firefox application data folder. * …the `chrome` folder with the `userChrome.css` (6) and `userContent.css` (7) files to change the Firefox's UI components design and elements within the content. * …the `containers.json` file of the Firefox Multi-Account Containers (8) to persist the configured containers. * …the documentation about the setup, tips & tricks and various configurations. More information and additional references: * pyllyukko/user.js (9) - Firefox `user.js` configuration file for Mozilla Firefox designed to harden browser settings and make it more secure. * ghacksuserjs/ghacks-user.js (10) - An ongoing comprehensive user.js template for configuring and hardening Firefox privacy, security and anti-fingerprinting. References: (1) https://www.mozilla.org/en-US/firefox (2) https://www.mozilla.org/en-US/firefox/developer (3) http://kb.mozillazine.org/User.js_file (4) http://kb.mozillazine.org/Profiles.ini_file (5) https://bugzilla.mozilla.org/show_bug.cgi?id=1098986 (6) http://kb.mozillazine.org/index.php?title=UserChrome.css (7) http://kb.mozillazine.org/index.php?title=UserContent.css (8) https://addons.mozilla.org/en-US/firefox/addon/multi-account-containers (9) https://github.com/ghacksuserjs/ghacks-user.js (10) https://github.com/pyllyukko/user.js Closes GH-139 --- snowblocks/firefox/README.md | 64 +++ .../content/support/extensions/octotree.css | 26 + snowblocks/firefox/chrome/userChrome.css | 14 + snowblocks/firefox/chrome/userContent.css | 19 + snowblocks/firefox/containers.json | 36 ++ snowblocks/firefox/ignore-dev-edition-profile | 0 snowblocks/firefox/profiles.iceowl.ini | 24 + snowblocks/firefox/profiles.igloo.ini | 24 + snowblocks/firefox/snowblock.json | 82 +++ snowblocks/firefox/user.js | 511 ++++++++++++++++++ 10 files changed, 800 insertions(+) create mode 100644 snowblocks/firefox/README.md create mode 100644 snowblocks/firefox/chrome/content/support/extensions/octotree.css create mode 100644 snowblocks/firefox/chrome/userChrome.css create mode 100644 snowblocks/firefox/chrome/userContent.css create mode 100644 snowblocks/firefox/containers.json create mode 100644 snowblocks/firefox/ignore-dev-edition-profile create mode 100644 snowblocks/firefox/profiles.iceowl.ini create mode 100644 snowblocks/firefox/profiles.igloo.ini create mode 100644 snowblocks/firefox/snowblock.json create mode 100644 snowblocks/firefox/user.js diff --git a/snowblocks/firefox/README.md b/snowblocks/firefox/README.md new file mode 100644 index 0000000..9f3fc21 --- /dev/null +++ b/snowblocks/firefox/README.md @@ -0,0 +1,64 @@ +# Firefox (Developer Edition) + +This snowblock for [Firefox][] Quantum and [Firefox Developer Edition][firefox-dev-edition] provides… + +* …the [`user.js`][mzkb-user.js] file to define and persist almost all preferences for a profile. +* …the [`profiles.ini`][mzkb-profiles.ini] file to configure the name and path of the main profile `igloo`. +* …the `ignore-dev-edition-profile` file (placed within the Firefox application data folder) to fix [Bugzilla bug 1098986][bugzilla-1098986] that causes Firefox Developer Edition to use the internal default profile regardless of whether another customized profile has been set as default. +* …the `chrome` folder with the [`userChrome.css`][mzkb-userchrome.css] and [`userContent.css`][mzkb-usercontent.css] files to customize the Firefox UI components design and layout and elements of websites. +* …the `containers.json` file of the [Firefox Multi-Account Containers][firefox-addon-multi-acc-cont] to persist the configured containers. + +## Configurations + +### Typeface + +Due to licensing and the availability of specific font families on different operating systems the preferences for the default sans-serif and serif typefaces must be configured manually using the Firefox UI (_Preferences_ → _General_ → _Language and Appearance_ → _Fonts & Colors_ → Advanced…) or by setting the following keys to the desired font family names: + +```js +/* Linux */ +user_pref("font.name.sans-serif.x-western", ""); // e.g. "Roboto" +user_pref("font.name.serif.x-western", ""); // e.g. "Noto Serif" + +/* macOS (default font families) */ +user_pref("font.name.sans-serif.x-western", "Helvetica"); +user_pref("font.name.serif.x-western", "Times"); +``` + +The default font for the monospace typeface is system independent and has already been set in the [`user.js`][gh-igloo-sb-ff-user.js] to [Source Code Pro][google-font-source-code-pro]: + +```js +user_pref("font.name.monospace.x-western", "Source Code Pro"); +``` + +## Troubleshooting + +### Ignore the default Firefox Developer Edition profile + +Due to a [bug in Firefox Developer Edition][bugzilla-1098986] only the default profile will be used regardless of whether another customized profile has been set as default. The problem has been fixed by creating a [`ignore-dev-edition-profile`][gh-igloo-sb-ff-ignore-dev-profile] file within the Firefox application data folder: + +```sh +# Linux +touch ~/.mozilla/firefox/ignore-dev-edition-profile + +# macOS +touch ~/Library/Application\ Support/Firefox/ignore-dev-edition-profile +``` + +## References + +* [ghacksuserjs/ghacks-user.js][] - An ongoing comprehensive user.js template for configuring and hardening Firefox privacy, security and anti-fingerprinting. +* [pyllyukko/user.js][] - Firefox `user.js` configuration file for Mozilla Firefox designed to harden browser settings and make it more secure. + +[bugzilla-1098986]: https://bugzilla.mozilla.org/show_bug.cgi?id=1098986 +[firefox]: https://www.mozilla.org/en-US/firefox +[firefox-addon-multi-acc-cont]: https://addons.mozilla.org/en-US/firefox/addon/multi-account-containers +[firefox-dev-edition]: https://www.mozilla.org/en-US/firefox/developer +[ghacksuserjs/ghacks-user.js]: https://github.com/ghacksuserjs/ghacks-user.js +[gh-igloo-sb-ff-ignore-dev-profile]: https://github.com/arcticicestudio/igloo/blob/develop/snowblocks/firefox/ignore-dev-edition-profile +[gh-igloo-sb-ff-user.js]: https://github.com/arcticicestudio/igloo/blob/develop/snowblocks/firefox/user.js +[google-font-source-code-pro]: https://fonts.google.com/specimen/Source+Code+Pro +[mzkb-profiles.ini]: http://kb.mozillazine.org/Profiles.ini_file +[mzkb-user.js]: http://kb.mozillazine.org/User.js_file +[mzkb-userchrome.css]: http://kb.mozillazine.org/index.php?title=UserChrome.css +[mzkb-usercontent.css]: http://kb.mozillazine.org/index.php?title=UserContent.css +[pyllyukko/user.js]: https://github.com/pyllyukko/user.js diff --git a/snowblocks/firefox/chrome/content/support/extensions/octotree.css b/snowblocks/firefox/chrome/content/support/extensions/octotree.css new file mode 100644 index 0000000..1c7bf02 --- /dev/null +++ b/snowblocks/firefox/chrome/content/support/extensions/octotree.css @@ -0,0 +1,26 @@ +/* + * Copyright (C) 2016-present Arctic Ice Studio + * Copyright (C) 2016-present Sven Greb + * + * Project: igloo + * Repository: https://github.com/arcticicestudio/igloo + * License: MIT + */ + +/** + * @file Defines rules for the "Octotree" addon/extension. + * + * @see https://github.com/buunguyen/octotree + */ + +@-moz-document domain("github.com") { + /* + * Remove the activation and keyboard shortcut popup. + * The state is stored with the `octotree.popup_shown` property stored in the local storage and set to `true` after + * being shown for the first time. + * Anyway, using a private window/session caused it to appear each time for any "github.com" domain. + */ + .octotree_toggle.btn .popup { + display: none; + } +} diff --git a/snowblocks/firefox/chrome/userChrome.css b/snowblocks/firefox/chrome/userChrome.css new file mode 100644 index 0000000..b60ca84 --- /dev/null +++ b/snowblocks/firefox/chrome/userChrome.css @@ -0,0 +1,14 @@ +/* + * Copyright (C) 2016-present Arctic Ice Studio + * Copyright (C) 2016-present Sven Greb + * + * Project: igloo + * Repository: https://github.com/arcticicestudio/igloo + * License: MIT + */ + +/** + * @file Defines rules to customize Firefox UI components. + * + * @see http://kb.mozillazine.org/index.php?title=UserChrome.css + */ diff --git a/snowblocks/firefox/chrome/userContent.css b/snowblocks/firefox/chrome/userContent.css new file mode 100644 index 0000000..8abdf7e --- /dev/null +++ b/snowblocks/firefox/chrome/userContent.css @@ -0,0 +1,19 @@ +/* + * Copyright (C) 2016-present Arctic Ice Studio + * Copyright (C) 2016-present Sven Greb + * + * Project: igloo + * Repository: https://github.com/arcticicestudio/igloo + * License: MIT + */ + +/** + * @file Defines rules to modify elements within websites. + * + * @see http://kb.mozillazine.org/index.php?title=UserContent.css + */ + +/*+-----------+ + + Extensions + + +------------+*/ +@import "content/support/extensions/octotree.css"; diff --git a/snowblocks/firefox/containers.json b/snowblocks/firefox/containers.json new file mode 100644 index 0000000..1027b0c --- /dev/null +++ b/snowblocks/firefox/containers.json @@ -0,0 +1,36 @@ +{ + "version": 4, + "lastUserContextId": 5, + "identities": [{ + "userContextId": 1, + "public": false, + "icon": "", + "color": "", + "name": "userContextIdInternal.thumbnail", + "accessKey": "" + }, { + "userContextId": 2, + "public": true, + "icon": "fingerprint", + "color": "blue", + "name": "Arctic Ice Studio" + }, { + "userContextId": 3, + "public": true, + "icon": "fingerprint", + "color": "blue", + "name": "Sven Greb" + }, { + "userContextId": 4, + "public": true, + "icon": "chill", + "color": "blue", + "name": "Arctic Frost Gaming" + }, { + "userContextId": 5, + "public": true, + "icon": "briefcase", + "color": "green", + "name": "sgreb@communicode" + }] +} diff --git a/snowblocks/firefox/ignore-dev-edition-profile b/snowblocks/firefox/ignore-dev-edition-profile new file mode 100644 index 0000000..e69de29 diff --git a/snowblocks/firefox/profiles.iceowl.ini b/snowblocks/firefox/profiles.iceowl.ini new file mode 100644 index 0000000..3a3c148 --- /dev/null +++ b/snowblocks/firefox/profiles.iceowl.ini @@ -0,0 +1,24 @@ +; Copyright (C) 2016-present Arctic Ice Studio +; Copyright (C) 2016-present Sven Greb + +; Project: igloo +; Repository: https://github.com/arcticicestudio/igloo +; License: MIT +; References: +; http://kb.mozillazine.org/Profiles.ini_file +; http://kb.mozillazine.org/Profile_folder_-_Firefox +; http://kb.mozillazine.org/Profile_folder + +[General] +StartWithLastProfile=1 + +[Profile0] +Name=igloo +IsRelative=1 +Path=Profiles/igloo +Default=1 + +[Profile1] +Name=dev-edition-default +IsRelative=1 +Path=Profiles/mhtutmh0.dev-edition-default diff --git a/snowblocks/firefox/profiles.igloo.ini b/snowblocks/firefox/profiles.igloo.ini new file mode 100644 index 0000000..80a79f3 --- /dev/null +++ b/snowblocks/firefox/profiles.igloo.ini @@ -0,0 +1,24 @@ +; Copyright (C) 2016-present Arctic Ice Studio +; Copyright (C) 2016-present Sven Greb + +; Project: igloo +; Repository: https://github.com/arcticicestudio/igloo +; License: MIT +; References: +; http://kb.mozillazine.org/Profiles.ini_file +; http://kb.mozillazine.org/Profile_folder_-_Firefox +; http://kb.mozillazine.org/Profile_folder + +[General] +StartWithLastProfile=1 + +[Profile0] +Name=igloo +IsRelative=1 +Path=igloo +Default=1 + +[Profile1] +Name=dev-edition-default +IsRelative=1 +Path=mhtutmh0.dev-edition-default diff --git a/snowblocks/firefox/snowblock.json b/snowblocks/firefox/snowblock.json new file mode 100644 index 0000000..25bd1d3 --- /dev/null +++ b/snowblocks/firefox/snowblock.json @@ -0,0 +1,82 @@ +[ + { + "clean": [ + "~/Library/Application Support/Firefox", + "~/.mozilla/firefox" + ] + }, + { + "link": { + "~/Library/Application Support/Firefox/Profiles/igloo/chrome": { + "create": true, + "force": true, + "hosts": { + "iceowl": "chrome" + } + }, + "~/Library/Application Support/Firefox/Profiles/igloo/containers.json": { + "create": true, + "force": true, + "hosts": { + "iceowl": "containers.json" + } + }, + "~/Library/Application Support/Firefox/ignore-dev-edition-profile": { + "create": true, + "force": true, + "hosts": { + "iceowl": "ignore-dev-edition-profile" + } + }, + "~/Library/Application Support/Firefox/profiles.ini": { + "create": true, + "force": true, + "hosts": { + "iceowl": "profiles.iceowl.ini" + } + }, + "~/Library/Application Support/Firefox/igloo/user.js": { + "create": true, + "force": true, + "hosts": { + "iceowl": "user.js" + } + }, + "~/.mozilla/firefox/igloo/chrome": { + "create": true, + "force": true, + "hosts": { + "igloo": "chrome" + } + }, + "~/.mozilla/firefox/igloo/containers.json": { + "create": true, + "force": true, + "hosts": { + "igloo": "containers.json" + } + }, + "~/.mozilla/firefox/ignore-dev-edition-profile": { + "create": true, + "force": true, + "hosts": { + "igloo": "ignore-dev-edition-profile" + } + }, + "~/.mozilla/firefox/profiles.ini": { + "create": true, + "force": true, + "hosts": { + "igloo": "profiles.igloo.ini" + } + }, + "~/.mozilla/firefox/igloo/user.js": { + "create": true, + "force": true, + "hosts": { + "igloo": "user.js" + } + } + } + } +] diff --git a/snowblocks/firefox/user.js b/snowblocks/firefox/user.js new file mode 100644 index 0000000..e012b6d --- /dev/null +++ b/snowblocks/firefox/user.js @@ -0,0 +1,511 @@ +/* + * Copyright (C) 2016-present Arctic Ice Studio + * Copyright (C) 2016-present Sven Greb + * + * Project: igloo + * Repository: https://github.com/arcticicestudio/igloo + * License: MIT + */ + +/** + * @file Defines and persist almost all preferences for a profile. + * + * @see http://kb.mozillazine.org/User.js_file + * @see http://kb.mozillazine.org/About:config + * @see https://github.com/ghacksuserjs/ghacks-user.js + * @see https://github.com/pyllyukko/user.js + */ + +/* + * Always use the cursor to navigate within pages. + * Available within the UI under: + * Preferences > General > Browsing + */ +user_pref("accessibility.browsewithcaret", false); + +/* + * Search for text when you start typing. + * Available within the UI under: + * Preferences > General > Browsing + */ +user_pref("accessibility.typeaheadfind", true); + +/* + * Improve the performance and unblock e10s by disabling unused accessability features. + * References: + * - https://wiki.mozilla.org/Electrolysis/Accessibility + * - https://wiki.mozilla.org/Electrolysis + */ +user_pref("accessibility.force_disabled", 1); + +/* + * Disallow Firefox to install and run studies. + * Available within the UI under: + * Preferences > General > Privacy & Security > Firefox Data Collection and Use + */ +user_pref("app.shield.optoutstudies.enabled", false); + +/* + * Always keep the bookmark menu open until it gets dismissed. + * By default, the bookmarks menu will close when opening a bookmark in a new tab. + */ +user_pref("browser.bookmarks.openInTabClosesMenu", false); + +/* Disable restoration of the default bookmarks for new sessions. */ +user_pref("browser.bookmarks.restore_default_bookmarks", false); + +/* + * Disallow Firefox to send backlogged crash reports. + * Available within the UI under: + * Privacy & Security > Firefox Data Collection and Use + */ +user_pref("browser.crashReports.unsubmittedCheck.autoSubmit2", false); + +/* + * Disable cyling through tabs in recently used order when using "Ctrl" + "Tab" keys. + * Available within the UI under: + * Preferences > General > Tabs + */ +user_pref("browser.ctrlTab.previews", false); + +/* Ensure the default background color is white. */ +user_pref("browser.display.background_color", "#FFFFFF"); + +/* + * Allow pages to choose their own fonts, instead of the selections defined by the user in the preferences. + * Available within the UI under: + * Preferences > General > Language and Appearance > Advanced + */ +user_pref("browser.display.use_document_fonts", 1); + +/* Automatically hide the download button on empty state. */ +user_pref("browser.download.autohideButton", true); + +/* + * Always use the specified default download directory. + * Available within the UI under: + * Preferences > General > Files and Applications > Downloads + */ +user_pref("browser.download.useDownloadDir", true); + +/* + * Open links in tabs instead of new windows. + * Available within the UI under: + * Preferences > General > Tabs + */ +user_pref("browser.link.open_newwindow", 3); + +/* + * Use a minimal new tab page by disabling all additional elements except the seach bar. + * Available within the UI under: + * Home > Firefox Home Content + */ +user_pref("browser.newtabpage.activity-stream.feeds.section.highlights", false); +user_pref("browser.newtabpage.activity-stream.feeds.snippets", false); +user_pref("browser.newtabpage.activity-stream.feeds.topsites", false); +user_pref("browser.newtabpage.activity-stream.migrationExpired", true); +user_pref("browser.newtabpage.activity-stream.section.highlights.includeBookmarks", false); +user_pref("browser.newtabpage.activity-stream.section.highlights.includeDownloads", false); +user_pref("browser.newtabpage.activity-stream.section.highlights.includePocket", false); +user_pref("browser.newtabpage.activity-stream.section.highlights.includeVisited", false); +user_pref("browser.newtabpage.activity-stream.showSearch", true); +user_pref("browser.newtabpage.activity-stream.topSitesRows", 1); +user_pref("browser.newtabpage.enabled", true); + +/* + * Use recommended performance settings. + * Available within the UI under: + * Preferences > General > Performance + */ +user_pref("browser.preferences.defaultPerformanceSettings.enabled", true); + +/* + * Block dangerous and deceptive content. + * Available within the UI under: + * Privacy & Security > Security > Deceptive Content and Dagerous Software Protection + */ +user_pref("browser.safebrowsing.downloads.enabled", true); +user_pref("browser.safebrowsing.downloads.remote.block_potentially_unwanted", true); +user_pref("browser.safebrowsing.downloads.remote.block_uncommon", true); +user_pref("browser.safebrowsing.malware.enabled", true); +user_pref("browser.safebrowsing.phishing.enabled", true); + +/* + * Always open tabs in the background when searching for selected text. + * By default, selecting text and searching for it with the context menu will switch to the tab. + */ +user_pref("browser.search.context.loadInBackground", true); + +/* + * Use "Google" as default search engine. + * References: + * - https://support.mozilla.org/en-US/kb/change-your-default-search-settings-firefox#w_default-search-engine + */ +user_pref("browser.search.defaultenginename", "Google"); +user_pref("browser.search.defaultenginename.US", "data:text/plain,browser.search.defaultenginename.US=Google"); + +/* + * Enable search suggestions. + * Available within the UI under: + * Search > Default Search Engine + */ +user_pref("browser.search.suggest.enabled", true); + +/* + * Automatically update search engines. + * Available within the UI under: + * Preferences > General > Firefox Updates + */ +user_pref("browser.search.update", true); + +/* + * Do not load pinned and hidden tabs on launch until selected. + * References: + * - https://support.mozilla.org/en-US/questions/1016880 + * - https://support.mozilla.org/en-US/kb/access-hidden-tabs-firefox + */ +user_pref("browser.sessionstore.restore_hidden_tabs", false); +user_pref("browser.sessionstore.restore_pinned_tabs_on_demand", true); + +/* + * Disable checking if Firefox is the default browser on startup. + * Available within the UI under: + * Preferences > General > Startup + */ +user_pref("browser.shell.checkDefaultBrowser", false); + +/* + * Enable spell check while typing. + * Available within the UI under: + * Preferences > General > Language + */ +user_pref("layout.spellcheckDefault", 1); + +/* + * Set the start page to Firefox's home. + * Available within the UI under: + * Home > New Windows and Tabs + */ +user_pref("browser.startup.homepage", "about:home"); + +/* + * Always restore the previous session. + * Available within the UI under: + * Preferences > General > Startup + */ +user_pref("browser.startup.page", 3); + +/* Render tabs in the title bar. */ +user_pref("browser.tabs.drawInTitlebar", false); + +/* + * Always open bookmark tabs in the background. + * By default, middle-clicking on (or using "Open in new tab" from within the context menu) a bookmark switches to the tab. + */ +user_pref("browser.tabs.loadBookmarksInBackground", true); + +/* + * When you open a link in a new tab, switch to it immediately + * Available within the UI under: + * Preferences > General > Tabs + */ +user_pref("browser.tabs.loadInBackground", true); + +/* + * Set the enabled elements/widgets and their layout in the overflow menu and navigation bar. + * Available within the UI under: + * Customize... + */ +user_pref("browser.uiCustomization.state", "{\"placements\":{\"widget-overflow-fixed-list\":[\"_react-devtools-browser-action\",\"ublock0_raymondhill_net-browser-action\",\"_c2c003ee-bd69-42a2-b0e9-6f34222cb046_-browser-action\",\"_a4c4eda4-fb84-4a84-b4a1-f7c1cbf2a1ad_-browser-action\"],\"PersonalToolbar\":[\"personal-bookmarks\"],\"nav-bar\":[\"back-button\",\"forward-button\",\"stop-reload-button\",\"home-button\",\"customizableui-special-spring1\",\"urlbar-container\",\"customizableui-special-spring2\",\"downloads-button\",\"_testpilot-containers-browser-action\",\"jid1-f3mymbcpz2azyl_jetpack-browser-action\"],\"toolbar-menubar\":[\"menubar-items\"],\"TabsToolbar\":[\"tabbrowser-tabs\",\"new-tab-button\",\"alltabs-button\"]},\"seen\":[\"developer-button\",\"ublock0_raymondhill_net-browser-action\",\"_react-devtools-browser-action\",\"jid1-f3mymbcpz2azyl_jetpack-browser-action\",\"webide-button\",\"_testpilot-containers-browser-action\",\"snoozetabs_mozilla_com-browser-action\",\"_a4c4eda4-fb84-4a84-b4a1-f7c1cbf2a1ad_-browser-action\"],\"dirtyAreaCache\":[\"PersonalToolbar\",\"nav-bar\",\"toolbar-menubar\",\"TabsToolbar\",\"widget-overflow-fixed-list\"],\"currentVersion\":14,\"newElementCount\":10}"); + +/* + * Set the UI density to "Normal". + * Available within the UI under: + * Customize... > Density + */ +user_pref("browser.uidensity", 0); + +/* Single mouse click selects the full URL. */ +user_pref("browser.urlbar.clickSelectsAll", true); + +/* Double mouse click selects parts of the URL. */ +user_pref("browser.urlbar.doubleClickSelectsAll", false); + +/* Don't show history or search suggestions entries in the URL bar. */ +user_pref("browser.urlbar.matchBuckets", ""); + +/* Show search suggestions in the URL bar. */ +user_pref("browser.urlbar.searchSuggestionsChoice", true); + +/* + * When using the URL/address bar, suggest... + * Available within the UI under: + * Preferences > Privacy & Security > Address Bar + */ +user_pref("browser.urlbar.suggest.bookmark", true); +user_pref("browser.urlbar.suggest.history", true); +user_pref("browser.urlbar.suggest.openpage", false); +user_pref("browser.urlbar.suggest.searches", true); + +/* Remember zoom state per site. */ +user_pref("browser.zoom.siteSpecific", true); + +/* + * Disable Firefox health reports that sends technical and interaction data to Mozilla. + * Allow Firefox + * Available within the UI under: + * Preferences > Privacy & Security > Firefox Data Collection and Use + */ +user_pref("datareporting.healthreport.uploadEnabled", false); + +/* + * Configure the Firefox Developer Tools. + * References: + * - https://developer.mozilla.org/son/docs/Tools + */ +user_pref("devtools.cache.disabled", false); +user_pref("devtools.command-button-frames.enabled", true); +user_pref("devtools.command-button-measure.enabled", true); +user_pref("devtools.command-button-pick.enabled", true); +user_pref("devtools.command-button-responsive.enabled", true); +user_pref("devtools.command-button-rulers.enabled", true); +user_pref("devtools.command-button-screenshot.enabled", true); +user_pref("devtools.debugger.ignore-caught-exceptions", true); +user_pref("devtools.debugger.pause-on-exceptions", true); +user_pref("devtools.defaultColorUnit", "authored"); +user_pref("devtools.editor.autoclosebrackets", true); +user_pref("devtools.editor.detectindentation", true); +user_pref("devtools.editor.expandtab", true); +user_pref("devtools.editor.keymap", "default"); +user_pref("devtools.editor.tabsize", 2); +user_pref("devtools.inspector.showUserAgentStyles", true); +user_pref("devtools.markup.collapseAttributes", true); +user_pref("devtools.memory.enabled", true); +user_pref("devtools.netmonitor.enabled", true); +user_pref("devtools.netmonitor.filters", "[\"all\"]"); +user_pref("devtools.netmonitor.persistlog", false); +user_pref("devtools.performance.enabled", true); +user_pref("devtools.performance.ui.enable-framerate", true); +user_pref("devtools.performance.ui.flatten-tree-recursion", true); +user_pref("devtools.performance.ui.invert-call-tree", true); +user_pref("devtools.screenshot.audio.enabled", true); +user_pref("devtools.source-map.client-service.enabled", true); +user_pref("devtools.storage.enabled", true); +user_pref("devtools.styleeditor.autocompletion-enabled", true); +user_pref("devtools.styleeditor.enabled", true); +user_pref("devtools.styleeditor.showMediaSidebar", true); +user_pref("devtools.theme", "light"); +user_pref("devtools.toolbox.host", "bottom"); +user_pref("devtools.toolbox.splitconsoleEnabled", false); +user_pref("devtools.toolbox.tabsOrder", "inspector,@react-devtools,webconsole,netmonitor,styleeditor,storage,jsdebugger,performance,memory"); +user_pref("devtools.webconsole.filter.debug", true); +user_pref("devtools.webconsole.filter.error", true); +user_pref("devtools.webconsole.filter.info", true); +user_pref("devtools.webconsole.filter.log", true); +user_pref("devtools.webconsole.filter.warn", true); +user_pref("devtools.webconsole.persistlog", false); +user_pref("devtools.webconsole.timestampMessages", true); +user_pref("devtools.webextensions.@react-devtools.enabled", true); + +/* Enable the protection to warn if information have not been submitted yet in a tab that is tried to be closed. */ +user_pref("dom.disable_beforeunload", true); + +/* + * Block pop-up- windows. + * Available within the UI under: + * Preferences > Privacy & Security > Permissions + */ +user_pref("dom.disable_open_during_load", true); + +/* Configure activation status of the Firefox builtin extensions. */ +user_pref("extensions.pocket.enabled", false); +user_pref("extensions.screenshots.disabled", false); + +/* Enable partial search matching and highlight all matches. */ +user_pref("findbar.entireword", false); +user_pref("findbar.highlightAll", false); + +/* Set the system independent typefaces. */ +user_pref("font.default.x-western", "sans-serif"); +user_pref("font.name.monospace.x-western", "Source Code Pro"); +user_pref("font.size.fixed.x-western", 16); + +/* + * Enable autoscrolling. + * Available within the UI under: + * Preferences > General > Browsing + */ +user_pref("general.autoScroll", false); + +/* + * Enable smooth-scrolling. + * Available within the UI under: + * Preferences > General > Browsing + */ +user_pref("general.smoothScroll", true); + +/* Disable the warning when opening "about:config". */ +user_pref("general.warnOnAboutConfig", false); + +/* Disable Firefox Sync Accounts. */ +user_pref("identity.fxaccounts.enabled", false); + +/* Set the supported UI and spellcheck languages. */ +user_pref("intl.accept_languages", "en-us,en,de"); + +/* Ensure that double clicking on a word will only select the word and not any space (if any) to the right of the word. */ +user_pref("layout.word_select.eat_space_to_next_word", false); + +/* Allow websites to change the color of the scrollbar and it's track. */ +user_pref("layout.css.scrollbar-colors.enabled", true); + +/* Set and configure the compact lightweight theme. */ +user_pref("lightweightThemes.persisted.footerURL", false); +user_pref("lightweightThemes.persisted.headerURL", false); +user_pref("lightweightThemes.selectedThemeID", "firefox-compact-light@mozilla.org"); + +/* + * Enable rhe "Encrypted Media Extensions" (EME) JavaScript API for playing DRMed video content in HTML. + * Available within the UI under: + * Preferences > General > Files and Applications > Digital Right Management (DRM) Content + * + * References: + * - https://wiki.mozilla.org/Media/EME + */ +user_pref("media.eme.enabled", true); + +/* + * Accept cookies and site data from websites and keep until they expire. + * Available within the UI under: + * Preferences > Privacy & Security > Cookies and Site Data + */ +user_pref("network.cookie.cookieBehavior", 0); +user_pref("network.cookie.lifetimePolicy", 0); + +/* + * Use default system proxy settings. + * Available within the UI under: + * Preferences > General > Network Proxy > Settings + */ +user_pref("network.proxy.type", 5); + +/* + * Configure categories to be cleared on private data deletion. + * Available within the UI under: + * Preferences > Privacy & Security > History + */ +user_pref("privacy.cpd.cache", true); +user_pref("privacy.cpd.cookies", true); +user_pref("privacy.cpd.downloads", true); +user_pref("privacy.cpd.formdata", true); +user_pref("privacy.cpd.history", true); +user_pref("privacy.cpd.sessions", true); +user_pref("privacy.cpd.siteSettings", true); +user_pref("privacy.cpd.offlineApps", true); + +/* + * Send websites a "Do Not Track" signal. + * Available within the UI under: + * Preferences > Privacy & Security > Tracking Protection + */ +user_pref("privacy.donottrackheader.enabled", true); + +/* + * Remember the history. + * Available within the UI under: + * Preferences > Privacy & Security > History + */ +user_pref("privacy.history.custom", false); + +/* + * Use Tracking Protection to block known trackers. + * Available within the UI under: + * Preferences > Privacy & Security > Tracking Protection + */ +user_pref("privacy.trackingprotection.enabled", true); + +/* + * Configure the time span on private data deletion. + * Available within the UI under: + * Preferences > Privacy & Security > History + */ +user_pref("privacy.sanitize.pending", "[]"); +user_pref("privacy.sanitize.timeSpan", 0); + +/* + * Enable Container Tabs. + * Available within the UI under: + * Preferences > General > Tabs + */ +user_pref("privacy.userContext.enabled", true); + +/* + * Disable the builtin reader mode extension. + * Also configures the typeface and color theme when enabled again. + */ +user_pref("reader.color_scheme", "light"); +user_pref("reader.content_width", 6); +user_pref("reader.line_height", 4); +user_pref("reader.font_size", 8); +user_pref("reader.font_type", "sans-serif"); +user_pref("reader.parse-on-load.enabled", false); + +/* + * Always ask for permission when a server requests personal certificates. + * Available within the UI under: + * Preferences > Privacy & Security > Security > Certificates + */ +user_pref("security.default_personal_cert", "Ask Every Time"); + +/* + * Query PCSP responder servers to confirm the current validity of certificates. + * Available within the UI under: + * Preferences > Privacy & Security > Security > Certificates + */ +user_pref("security.OCSP.enabled", 1); + +/* + * Always ask to save logins and passwords for websites. + * Available within the UI under: + * Preferences > Privacy & Security > Forms & Passwords + */ +user_pref("signon.rememberSignons", true); + +/* Set the available values for zoom levels in percent. */ +user_pref("toolkit.zoomManager.zoomValues", ".1,.2,.3,.4,.5,.6,.7,.8,.9,1,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,2,2.1,2.2,2.3,2.4,2.5,2.6,2.7,2.8,2.9,3,3.1,3.2,3.3,3.4,3.5,3.6,3.7,3.8,3.9,4,4.1,4.2,4.3,4.4,4.5,4.6,4.7,4.8,4.9,5"); + +/* Disable showing the menu bar when clicking the "Alt" key. */ +user_pref("ui.key.menuAccessKeyFocuses", true); + +/* + * Use default tracking protection/block lists. + * Available within the UI under: + * Preferences > Privacy & Security > Tracking Protection + */ +user_pref("urlclassifier.trackingTable", "test-track-simple,base-track-digest256"); + +/* + * Always warn when websites try to install extensions/addons. + * Available within the UI under: + * Preferences > Privacy & Security > Permissions + */ +user_pref("xpinstall.whitelist.required", true); + +/* + * Set keyboard mappings for "uBlock Origin" extension to enable the element picker and zapper. + * NOTE: The keys are set for Linux OS, but also working on macOS where instead of using the "Ctrl" the "Command" (⌘) + * key must be used! + * + * References: + * - https://github.com/gorhill/uBlock + * - https://addons.mozilla.org/en-US/firefox/addon/ublock-origin + */ +user_pref("xtensions.ublock0.shortcuts.launch-element-picker", "alt-shift-Z"); +user_pref("xtensions.ublock0.shortcuts.launch-element-zapper", "alt-Z"); + +/* + * Set the maximum and minimal zoom levels. + * See "toolkit.zoomManager.zoomValues" preference for available zoom values. + */ +user_pref("zoom.maxPercent", 500); +user_pref("zoom.minPercent", 10); From 2fa3d1d59a98df808e89c3edc2358b316532bf9f Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Mon, 17 Sep 2018 13:51:58 +0200 Subject: [PATCH 131/214] JetBrains IDE configurations snowblock MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This new snowblock includes all important configurations for all used JetBrains (1) IDEs and products which are currently IntelliJ (2) (Ultimate Edition), PyCharm (3) (Community Edition), Webstorm (4) and GoLand (5). For details about the paths see the documentation about directories used by the IDE to store settings, caches, plugins and logs (6). It includes… * …the code style (7) XMl configuration file stored in the `codestyles` folder. * …the inspections (8) XMl configuration file stored in the `inspections` folder. * …the keymaps (9) XMl configuration files for Linux and macOS stored in the `keymaps` folder. See the keymap reference (10) for a visual presentation of the default mappings. * …the preferences (11) XMl configuration files stored in the `options` folder. This includes the following settings: * `code.style.schemes.xml` - settings of the currently used code style. * `colors.scheme.xml` - settings of the currently used color scheme. * `customization.xml` and `project.default.xml` - settings of the customized menus and toolbars (12). * `editor.codeinsight.xml` - settings of various automatic code transformations. * `keymap.xml` - the currently used keymap. * `laf.xml` and `ui.lnf.yml` - settings of the currently used UI theme. * all other customized preferences defined in the various categories: `editor.xml`, `ide.general.xml` and `options.xml` * …the list of disabled plugins (13) stored in the `disabled_plugins.txt` file. >> snowsaw core plugin configuration NOTE: JetBrains uses a naming scheme for the folder all user configurations are stored in based on the product major/minor version! This requires this snowblock to be updated as soon as the product gets updated to adapt to the new version string. >>>>>> `clean` The target paths (based on the host OS) with the naming scheme `` should be cleaned before the `link` core plugin execution. NOTE: Due to the JetBrains naming scheme for the target path (more details described above) the previous targets should be kept to ensure they are cleaned up by this plugin after updating to a new product version. >>>>>> `link` The target paths (based on the host OS) with the naming scheme `` should be created by snowsaw if they doesn't exist yet. NOT: Due to the JetBrains naming scheme for the target path (more details described above) must be updated after updating to a new product version. References: (1) https://www.jetbrains.com/products.html (2) https://www.jetbrains.com/idea (3) https://www.jetbrains.com/pycharm (4) https://www.jetbrains.com/webstorm (5) https://www.jetbrains.com/go (6) https://intellij-support.jetbrains.com/hc/en-us/articles/206544519-Directories-used-by-the-IDE-to-store-settings-caches-plugins-and-logs (7) https://www.jetbrains.com/help/idea/settings-code-style.html (8) https://www.jetbrains.com/help/idea/inspections-settings.html (9) https://www.jetbrains.com/help/idea/settings-keymap.html (10) https://www.jetbrains.com/help/idea/keymap-reference.html (11) https://www.jetbrains.com/help/idea/settings-preferences-dialog.html (12) https://www.jetbrains.com/help/idea/menus-and-toolbars.html (13) https://www.jetbrains.com/help/idea/managing-plugins.html Closes GH-137 --- snowblocks/jetbrains/README.md | 64 +++++ .../jetbrains/codestyles/arctic-codestyle.xml | 79 +++++++ snowblocks/jetbrains/disabled_plugins.txt | 49 ++++ .../inspection/arctic-inspections.xml | 143 +++++++++++ .../jetbrains/keymaps/arctic-keymap-macos.xml | 105 +++++++++ .../jetbrains/keymaps/arctic-keymap.xml | 117 +++++++++ .../jetbrains/options/code.style.schemes.xml | 13 + .../jetbrains/options/colors.scheme.xml | 13 + .../jetbrains/options/customization.xml | 122 ++++++++++ .../jetbrains/options/editor.codeinsight.xml | 24 ++ snowblocks/jetbrains/options/editor.xml | 35 +++ snowblocks/jetbrains/options/ide.general.xml | 21 ++ snowblocks/jetbrains/options/keymap.xml | 13 + snowblocks/jetbrains/options/laf.xml | 13 + snowblocks/jetbrains/options/options.xml | 17 ++ .../jetbrains/options/project.default.xml | 17 ++ snowblocks/jetbrains/options/ui.lnf.xml | 25 ++ snowblocks/jetbrains/snowblock.json | 222 ++++++++++++++++++ 18 files changed, 1092 insertions(+) create mode 100644 snowblocks/jetbrains/README.md create mode 100644 snowblocks/jetbrains/codestyles/arctic-codestyle.xml create mode 100644 snowblocks/jetbrains/disabled_plugins.txt create mode 100644 snowblocks/jetbrains/inspection/arctic-inspections.xml create mode 100644 snowblocks/jetbrains/keymaps/arctic-keymap-macos.xml create mode 100644 snowblocks/jetbrains/keymaps/arctic-keymap.xml create mode 100644 snowblocks/jetbrains/options/code.style.schemes.xml create mode 100644 snowblocks/jetbrains/options/colors.scheme.xml create mode 100644 snowblocks/jetbrains/options/customization.xml create mode 100644 snowblocks/jetbrains/options/editor.codeinsight.xml create mode 100644 snowblocks/jetbrains/options/editor.xml create mode 100644 snowblocks/jetbrains/options/ide.general.xml create mode 100644 snowblocks/jetbrains/options/keymap.xml create mode 100644 snowblocks/jetbrains/options/laf.xml create mode 100644 snowblocks/jetbrains/options/options.xml create mode 100644 snowblocks/jetbrains/options/project.default.xml create mode 100644 snowblocks/jetbrains/options/ui.lnf.xml create mode 100644 snowblocks/jetbrains/snowblock.json diff --git a/snowblocks/jetbrains/README.md b/snowblocks/jetbrains/README.md new file mode 100644 index 0000000..af6d018 --- /dev/null +++ b/snowblocks/jetbrains/README.md @@ -0,0 +1,64 @@ +# JetBrains IDEs + +This snowblock provides all important configurations for all used [JetBrains][] IDEs and products, currently [IntelliJ][] (Ultimate Edition), [PyCharm][] (Community Edition), [Webstorm][] and [GoLand][]. For details about the paths for user configurations see the documentation about [directories used by the IDE to store settings, caches, plugins and logs][intellij-doc-settings-paths]. + +## Content + +The includes configurations are mostly platform and IDE/product independent. + +* The [code style][intellij-doc-code-style] XMl configuration file stored in the `codestyles` folder. +* The [inspections][intellij-doc-inspections] XMl configuration file stored in the `inspections` folder. +* The [keymaps][intellij-doc-keymap] XMl configuration files for Linux and macOS stored in the `keymaps` folder. See the [keymap reference][intellij-doc-keymap-ref] for a visual presentation of the default mappings. +* The [preference][intellij-doc-prefs] XMl configuration files are stored in the `options` folder: + * `code.style.schemes.xml` - settings of the currently used code style. + * `colors.scheme.xml` - settings of the currently used color scheme. + * `customization.xml` and `project.default.xml` - settings of the customized [menus and toolbars][intellij-doc-menu-toolbar]. + * `editor.codeinsight.xml` - settings of various automatic code transformations. + * `keymap.xml` - the currently used keymap. + * `laf.xml` and `ui.lnf.yml` - settings of the currently used UI theme. + * all other customized preferences defined in the various categories: `editor.xml`, `ide.general.xml` and `options.xml` +* The list of [disabled plugins][intellij-doc-plugins] stored in the `disabled_plugins.txt` file. + +## Configurations + +### Typeface + +Due to licensing and the availability of specific font families on different operating systems the preferences for the sans-serif UI typefaces must be configured manually using the IntelliJ UI (_Preferences_ → _Appearance & Behavior_ → _Appearance_ → _UI Options_) or by adding the following `

t)Mf|FaeRM()b`p#V1*hT=tc~g>id^Q;~rUk7q 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%0D}UunHO=FOXDq*i^v!DHk8?2@ zx|C;}55z75!cMAp;=W<86%pKbaM#DJDC8U7tu$(*^xn;p#H{7djH{AENsiIycB?tN zhg4+?3Od#`rgptnC!jPduB10+?eC}awS7lRjhUtXStm>ussJQ61*HJF+gb~!M#edY z(XAiwir=&>{V8$rxETVxammT&!Ux_F=fX_$3NR;Os-dt#B+z^+^bY+uljay|4hZRE zg|-)j+N}}!iigs_{aT_)Pt-nMI@QX+2!(pwx;mEd

jH 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 literal 35681 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 From dedfd67be6a49650000544439cad86fd013e0be8 Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Tue, 20 Nov 2018 06:13:50 +0100 Subject: [PATCH 154/214] Implement shorthand script to open files, paths or URLs Most OS provide builtin tools to open a file, path or URL with the associated application based on the MIME type. To use a uniform command for it this commit adds a new script called `open`. When running on Linux it'll use the XDG compliant tool `xdg-open` from xdg-utils (1) while it'll pass through the parameters to the builtin application also called `open` when run on macOS. References: (1) https://www.freedesktop.org/wiki/Software/xdg-utils Closes GH-169 --- snowblocks/bash/bin/open | 53 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100755 snowblocks/bash/bin/open diff --git a/snowblocks/bash/bin/open b/snowblocks/bash/bin/open new file mode 100755 index 0000000..a0f4ac1 --- /dev/null +++ b/snowblocks/bash/bin/open @@ -0,0 +1,53 @@ +#!/usr/bin/env bash + +# Copyright (C) 2016-present Arctic Ice Studio +# Copyright (C) 2016-present Sven Greb + +# Project: igloo +# Repository: https://github.com/arcticicestudio/igloo +# License: MIT + +set -euo pipefail + +# Open a file, path or URL with the associated application based on the MIME type. +# When running on Linux it'll use the XDG compliant tool "xdg-open" and will pass through the parameters to the builtin +# application "open" when run on macOS. +# +# @param $1 the path or URL to open +# @see https://www.gnu.org/software/bash/manual/bashref.html#Shell-Parameter-Expansion +# @see https://en.wikipedia.org/wiki/Uname +open() { + local os_type + # Check if the default environment variable is set and not empty (remove spaces using shell parameter expansion), otherwise try to detect via GNU core util "uname". + if [[ ! -z "${OSTYPE// }" ]]; then + os_type="$OSTYPE" + elif ! command -v uname > /dev/null 2>&1; then + os_type=$(uname -s) + fi + + if [[ -z "$os_type" ]]; then + echo "Unable to detect OS type!" + exit 1 + fi + + if [[ "$os_type" == "linux-gnu" || "$os_type" == "Linux" ]]; then + if command -v xdg-open > /dev/null 2>&1; then + xdg-open $@ + else + echo "'xdg-open' is not installed or available in PATH!" + exit 1 + fi + elif [[ "$OSTYPE" == "darwin"* || "$OSTYPE" == "Darwin"* ]]; then + if command -v open > /dev/null 2>&1; then + open $@ + else + echo "'open' is not installed or available in PATH!" + exit 1 + fi + else + echo "OS type not supported!" + exit 1 + fi +} + +open $@ From 4807c5658d65c3bc191658b17c55ac89765bcb5d Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Sat, 15 Dec 2018 13:26:30 +0100 Subject: [PATCH 155/214] Bookmarks November 2018 > Added - web.dev (1) - Let's build the future of the web. With actionable guidance and analysis, web.dev helps developers like you learn and apply the web's modern capabilities to your own sites and apps. - squoosh.app (2) - Squoosh is an image compression web app that allows you to dive into the advanced options provided by various image compressors. - Contributor Covenant (3) - A Code of Conduct for Open Source Projects - Eva Icons (4) - Eva Icons is a pack of more than 480 beautifully crafted Open Source icons for common actions and items. - Feather Icons (5) - Simply beautiful open source icons - CommonMark (6) - A strongly defined, highly compatible specification of Markdown - Overreacted (7) - Personal blog by Dan Abramov (8), React core team developer. - JSON-LD (9) - A JSON-based Serialization for Linked Data. JSON-LD organizes and connects it, creating a better Web. > Updated - AUR (1): Updated the outdated keyword search URL from `https://aur.archlinux.org?K=%s` to `https://aur.archlinux.org/packages/?O=0&K=%s`. References: (1) https://web.dev (2) https://squoosh.app (3) https://www.contributor-covenant.org (4) https://akveo.github.io/eva-icon (5) https://feathericons.com (6) https://commonmark.org (7) https://overreacted.io (8) https://mobile.twitter.com/dan_abramov (9) https://json-ld.org (10) https://aur.archlinux.org Resolves GH-170 --- snowflakes/buku/bookmarks.html.igloocrypt | Bin 54851 -> 55566 bytes .../buku/bootstrap-database.sh.igloocrypt | Bin 36560 -> 37378 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/snowflakes/buku/bookmarks.html.igloocrypt b/snowflakes/buku/bookmarks.html.igloocrypt index 2c94ef12adcd4bf9179e7b756475e36cc20d4a62..9c3226b0df9e389d47aa053d6f41347af332f3c9 100644 GIT binary patch literal 55566 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 Q3Uzu(23tvSQ906(k~QtZU;qFB diff --git a/snowflakes/buku/bootstrap-database.sh.igloocrypt b/snowflakes/buku/bootstrap-database.sh.igloocrypt index 15388378f80e44932121344a481ee3fffd11e3eb..c39093bfd15d2766e9ec471aba79e79eba8fbd1d 100755 GIT binary patch literal 37378 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 From 631ab5f1112d7c2073ede34b9ea1ead9f72a6d48 Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Mon, 31 Dec 2018 09:41:39 +0100 Subject: [PATCH 156/214] Add new conditional auth config include for @svengreb To ensure all projects by @svengreb (1) are commited with the correct Git credentials a new conditional include for the `~/yggdrasil/svengreb/` path has been added. References: (1) https://github.com/svengreb Resolves GH-171 --- snowblocks/git/gitconfig | 3 +++ 1 file changed, 3 insertions(+) diff --git a/snowblocks/git/gitconfig b/snowblocks/git/gitconfig index 0328aef..aa09e0f 100755 --- a/snowblocks/git/gitconfig +++ b/snowblocks/git/gitconfig @@ -13,6 +13,9 @@ [includeIf "gitdir:~/yggdrasil/"] path = ~/.gitconfig-auth +[includeIf "gitdir:~/yggdrasil/svengreb/"] + path = ~/.gitconfig-auth-svengreb + [includeIf "gitdir:~/code/bitbucket/"] path = ~/.gitconfig-auth From 59a5cc50c0031b7866eccf3e74c712949409c2c7 Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Wed, 16 Jan 2019 15:55:51 +0100 Subject: [PATCH 157/214] Ensure macOS compatibility for line- and block movement keymappings The keymappings implemented in GH-31 works fine on Linux systems, but conflicts with a global (non-modifyable) system keymapping on macOS. Therefore a condition check for the currently running environment should be used to use other specific keymappings for macOS and Linux. Resolves GH-172 --- snowblocks/vim/vimrc | 27 ++++++++++++++++++++------- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/snowblocks/vim/vimrc b/snowblocks/vim/vimrc index 46b914c..f4324fc 100644 --- a/snowblocks/vim/vimrc +++ b/snowblocks/vim/vimrc @@ -160,13 +160,26 @@ map :NERDTreeToggle " Moves the current line or selected block(s) up- or down by one line. " " In normal -and insert mode the "==" re-indents the moved line to suit its new position. -" In visual mode "gv" reselects the last visual block while the "=" re-indents that block using the preassigned "'>" mark to identify the selection end. -nnoremap :m+== -nnoremap :m-2== -inoremap :m+==gi -inoremap :m-2==gi -vnoremap :m '>+1gv=gv -vnoremap :m '<-2gv=gv +" In visual mode "gv" reselects the last visual block while the "=" re-indents that block using the +" preassigned "'>" mark to identify the selection end. +" Note that due to a global (non-modifyable) system keymapping on macOS it is necessary to use environment +" specific assignments. + +if has("macunix") + nnoremap :m+== + nnoremap :m-2== + inoremap :m+==gi + inoremap :m-2==gi + vnoremap :m '>+1gv=gv + vnoremap :m '<-2gv=gv +else + nnoremap :m+== + nnoremap :m-2== + inoremap :m+==gi + inoremap :m-2==gi + vnoremap :m '>+1gv=gv + vnoremap :m '<-2gv=gv +endif "+---------------+ "+ Configuration + From 60274c38edf4f8721abc2db3d3910750a2587c8a Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Tue, 29 Jan 2019 16:49:01 +0100 Subject: [PATCH 158/214] Brewfile Update Januar 2019 This is the regular batch update for new, changed and deleted Homebrew formulas/casks/taps. >>> Added - cabextract (1) - OSS tool to extract _Microsoft cabinet files_ (`.cab`) - nq (2) - A UNIX CLI queue utility that allows to create very lightweight job queue systems which require no setup, maintenance, supervision, or any long-running processes. - wallpaper (3) - Allows to manage the desktop wallpaper on macOS from the CLI - Spectrum (6) - The desktop app of Spectrum - Visual Studio Code (7) - Code editing. Redefined. Free. Open source. Runs everywhere. >>> Updated - KeepassXC (4) - An actively developed community-edition of KeePassX (5) References: (1) https://www.cabextract.org.uk (2) https://github.com/chneukirchen/nq (3) https://github.com/sindresorhus/macos-wallpaper (4) https://keepassxc.org (5) https://www.keepassx.org (6) https://spectrum.chat (7) https://code.visualstudio.com Resolves GH-173 --- snowflakes/homebrew/Brewfile | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/snowflakes/homebrew/Brewfile b/snowflakes/homebrew/Brewfile index ab7d32c..6a2e152 100644 --- a/snowflakes/homebrew/Brewfile +++ b/snowflakes/homebrew/Brewfile @@ -23,6 +23,7 @@ brew "bash-completion@2" brew "bat" brew "buku" brew "cmake" +brew "cabextract" brew "cmark" brew "cmark-gfm" brew "coreutils" @@ -87,6 +88,7 @@ brew "neofetch" brew "nmap" brew "node" brew "noti" +brew "nq" brew "ntfs-3g" brew "openfortivpn" brew "openssh", args: ["with-ldns"] @@ -101,9 +103,9 @@ brew "rg" brew "rsync" brew "rust" brew "rustc-completion" +brew "sassc" brew "shellcheck" brew "shellharden" -brew "sassc" brew "sqlite" brew "task", args: ["without-gnutls"] brew "terminal-notifier" @@ -113,6 +115,7 @@ brew "tmux", args: ["with-utf8proc"] brew "trash-cli" brew "tree" brew "vim", args: ["with-client-server", "with-gettext", "with-lua", "with-luajit", "with-override-system-vi", "with-tcl"] +brew "wallpaper" brew "watchman" brew "webp" brew "wget", args: ["with-gpgme", "with-libmetalink", "with-pcre"] @@ -176,7 +179,7 @@ cask "java" cask "java8" cask "java-jdk-javadoc" cask "kap" -cask "keepassx" +cask "keepassxc" cask "keybase" cask "microsoft-teams" cask "mongodb-compass" @@ -186,9 +189,11 @@ cask "postman" cask "pycharm-ce" cask "rsyncosx" cask "slack" +cask "spectrum" cask "tunnelblick" cask "virtualbox" cask "virtualbox-extension-pack" +cask "visual-studio-code" cask "webstorm" cask "xquartz" From 0e8f37f9365cef24733047428aed54ffadf9d9e5 Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Mon, 4 Feb 2019 13:15:17 +0100 Subject: [PATCH 159/214] Add Homebrew formula for "hostess" Add the formula for hostess (1), an idempotent command-line utility for managing your `/etc/hosts` file. References: (1) https://github.com/cbednarski/hostess Resolves GH-174 --- snowflakes/homebrew/Brewfile | 1 + 1 file changed, 1 insertion(+) diff --git a/snowflakes/homebrew/Brewfile b/snowflakes/homebrew/Brewfile index 6a2e152..58e8b15 100644 --- a/snowflakes/homebrew/Brewfile +++ b/snowflakes/homebrew/Brewfile @@ -62,6 +62,7 @@ brew "git-sizer" brew "gnu-sed", args: ["with-default-names"] brew "gnu-tar", args: ["with-default-names"] brew "gnu-witch", args: ["with-default-names"] +brew "hostess" brew "htop", args: ["with-ncurses"] brew "httpie" brew "hub" From eb222438e6cd93b19c222043570bb7c627ea3e3b Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Fri, 8 Feb 2019 08:33:47 +0100 Subject: [PATCH 160/214] Fix invalid path for Firefox `user.js` file on macOS The path for the custom Firefox `user.js` file (1) file was invalid for macOS hosts. It doesn't contained the `Profiles` directory causing a symlink to a path where the file won't be read by Firefox. References: (1) http://kb.mozillazine.org/User.js_file Fixes GH-175 --- snowblocks/firefox/snowblock.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/snowblocks/firefox/snowblock.json b/snowblocks/firefox/snowblock.json index 25bd1d3..ca3ec6b 100644 --- a/snowblocks/firefox/snowblock.json +++ b/snowblocks/firefox/snowblock.json @@ -35,7 +35,7 @@ "iceowl": "profiles.iceowl.ini" } }, - "~/Library/Application Support/Firefox/igloo/user.js": { + "~/Library/Application Support/Firefox/Profiles/igloo/user.js": { "create": true, "force": true, "hosts": { From 5a449b478f6ed59e6a1070f6a979beb66fffed74 Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Tue, 12 Feb 2019 15:52:56 +0100 Subject: [PATCH 161/214] Add Homebrew "gotop" formula Add the formula for gotop (1), a terminal based graphical activity monitor inspired by gtop (2) and vtop (3). The formula is available through the `cjbassi/gotop` tap. References: (1) https://github.com/cjbassi/gotop (2) https://github.com/aksakalli/gtop (3) https://github.com/MrRio/vtop Resolves GH-176 --- snowflakes/homebrew/Brewfile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/snowflakes/homebrew/Brewfile b/snowflakes/homebrew/Brewfile index 58e8b15..64ff326 100644 --- a/snowflakes/homebrew/Brewfile +++ b/snowflakes/homebrew/Brewfile @@ -7,6 +7,7 @@ tap "2ion/mpv-bash-completion" tap "arcticicestudio/bitfroest-brew", "~/yggdrasil/bitfroest-brew.git" +tap "cjbassi/gotop" tap "homebrew/bundle" tap "homebrew/cask" tap "homebrew/cask-drivers" @@ -51,6 +52,7 @@ brew "gifsicle" brew "git" brew "glances" brew "gocryptfs" +brew "gotop" brew "gpatch" brew "gpg" brew "gradle", args: ["with-all"] From fed546f55aa0f117141e5c14097fc1a03007e5d3 Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Tue, 12 Feb 2019 15:54:48 +0100 Subject: [PATCH 162/214] Add Homebrew "dive" formula Add the formula for dive (1), a tool for exploring a docker image, layer contents, and discovering ways to shrink your Docker image size. The formula is available through the `wagoodman/dive` tap. References: (1) https://github.com/wagoodman/dive Resolves GH-177 --- snowflakes/homebrew/Brewfile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/snowflakes/homebrew/Brewfile b/snowflakes/homebrew/Brewfile index 64ff326..d6aeff9 100644 --- a/snowflakes/homebrew/Brewfile +++ b/snowflakes/homebrew/Brewfile @@ -16,6 +16,7 @@ tap "homebrew/cask-fonts" tap "homebrew/cask-versions" tap "homebrew/core" tap "homebrew/livecheck" +tap "wagoodman/dive" brew "asciinema" brew "awscli" @@ -32,6 +33,7 @@ brew "ctop" brew "dep" brew "diffutils" brew "diff-so-fancy" +brew "dive" brew "docker-completion" brew "docker-compose-completion" brew "e2fsprogs" From c8dfabe7141832a649d2c420ce23973bdd333a9a Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Tue, 12 Feb 2019 15:55:22 +0100 Subject: [PATCH 163/214] Add Homebrew "streamlink" formula Add the formula for streamlink (1), a CLI for extracting streams from various websites to a video player of your choosing by using "FFMPEG" and "youtube-dl". References: (1) https://streamlink.github.io Resolves GH-178 --- snowflakes/homebrew/Brewfile | 1 + 1 file changed, 1 insertion(+) diff --git a/snowflakes/homebrew/Brewfile b/snowflakes/homebrew/Brewfile index d6aeff9..582db73 100644 --- a/snowflakes/homebrew/Brewfile +++ b/snowflakes/homebrew/Brewfile @@ -112,6 +112,7 @@ brew "sassc" brew "shellcheck" brew "shellharden" brew "sqlite" +brew "streamlink" brew "task", args: ["without-gnutls"] brew "terminal-notifier" brew "timewarrior" From 118e65885f269a78e855b4f1038975a65c74dfa8 Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Sat, 23 Feb 2019 16:13:00 +0100 Subject: [PATCH 164/214] Visual Studio Code This commit includes the migration from Atom (1) to Visual Studio Code (2). I've used Atom since it came out some years ago and it has always been a great editor and IDE for web development as well as main editor for documents, but VS Code evolved a lot during the last year. Compared to Atom there are many features and improvements that I've really liked to see for Atom. Even though it can be extended and modified a lot there are limitations due to Atom's core in aspects like performance, stability and overall development features like auto completion and language-awareness. VS Code feels more "language-native" when it comes to e.g. intelligent auto-completion, the integration of linters and language specific tools. It comes with support for a lot of languages out-of-the-box like JavaScript/TypeScript, CSS/HTML and also native languages like Go or Rust. The change was not easy for me since I've customized and developed Atom to fit all of development needs, but after some testing time I've to admit that the UX of VS Code feels better now. Before actually switching I made sure that all my beloved Atom packages are also available as VS Code extension (same code base) or an equivalent alternative. Therefore this initial setup includes - core and extension settings - custom keybindings - locale configurations - a list of all installed extensions - CSS stylesheets to customize some that'll be loaded by the "Custom CSS and JS Loader" (3) extension - workspace files The following extensions are used: - Nord (4) - file-icons (5) - Prettier (6) - ESLint (7) - Markdown Preview Enhanced (8) - Babel JavaScript (9) - vscode-styled-components (10) - Path Intellisense (11) - Go (12) - Docker (13) - YAML (14) - EditorConfig (15) - Projects+ (16) - Polacode (17) - Custom CSS and JS Loader (18) - Rust (rls) (19) - GraphQL (20) References: (1) https://atom.io (2) https://code.visualstudio.com (3) https://marketplace.visualstudio.com/items?itemName=be5invis.vscode-custom-css (4) https://marketplace.visualstudio.com/items?itemName=arcticicestudio.nord-visual-studio-code (5) https://marketplace.visualstudio.com/items?itemName=file-icons.file-icons (6) https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode (7) https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint (8) https://marketplace.visualstudio.com/items?itemName=shd101wyy.markdown-preview-enhanced (9) https://marketplace.visualstudio.com/items?itemName=mgmcdermott.vscode-language-babel (10) https://marketplace.visualstudio.com/items?itemName=jpoissonnier.vscode-styled-components (11) https://marketplace.visualstudio.com/items?itemName=christian-kohler.path-intellisense (12) https://marketplace.visualstudio.com/items?itemName=ms-vscode.Go (13) https://marketplace.visualstudio.com/items?itemName=PeterJausovec.vscode-docker (14) https://marketplace.visualstudio.com/items?itemName=redhat.vscode-yaml (15) https://marketplace.visualstudio.com/items?itemName=EditorConfig.EditorConfig (16) https://marketplace.visualstudio.com/items?itemName=fabiospampinato.vscode-projects-plus (17) https://marketplace.visualstudio.com/items?itemName=pnp.polacode (18) https://marketplace.visualstudio.com/items?itemName=be5invis.vscode-custom-css (19) https://marketplace.visualstudio.com/items?itemName=rust-lang.rust (20) https://marketplace.visualstudio.com/items?itemName=Prisma.vscode-graphql Resolves GH-179 --- .../plank/launchers/igloo/atom.dockitem | 2 - .../igloo/firefox-developer-edition.dockitem | 2 + .../igloo/visual-studio-code.dockitem | 2 + snowblocks/taskwarrior/scripts/open-note.sh | 2 +- snowblocks/taskwarrior/taskopenrc | 2 +- snowblocks/taskwarrior/taskrc | 1 + .../css/remove-action-button.css | 29 +++ .../visual-studio-code/keybindings.json | 207 ++++++++++++++++++ snowblocks/visual-studio-code/locale.json | 15 ++ snowblocks/visual-studio-code/projects.json | 18 ++ snowblocks/visual-studio-code/settings.json | 111 ++++++++++ .../snippets/git-commit.json | 17 ++ .../snippets/javascript.json | 70 ++++++ .../snippets/javascriptreact.json | 34 +++ .../visual-studio-code/snippets/markdown.json | 39 ++++ snowblocks/visual-studio-code/snowblock.json | 89 ++++++++ .../workspaces/development.code-workspace | 11 + .../workspaces/docs.code-workspace | 11 + .../workspaces/nord.code-workspace | 143 ++++++++++++ snowflakes/visual-studio-code/extensions.json | 21 ++ 20 files changed, 822 insertions(+), 4 deletions(-) delete mode 100644 snowblocks/plank/launchers/igloo/atom.dockitem create mode 100644 snowblocks/plank/launchers/igloo/firefox-developer-edition.dockitem create mode 100644 snowblocks/plank/launchers/igloo/visual-studio-code.dockitem create mode 100644 snowblocks/visual-studio-code/css/remove-action-button.css create mode 100644 snowblocks/visual-studio-code/keybindings.json create mode 100644 snowblocks/visual-studio-code/locale.json create mode 100644 snowblocks/visual-studio-code/projects.json create mode 100644 snowblocks/visual-studio-code/settings.json create mode 100644 snowblocks/visual-studio-code/snippets/git-commit.json create mode 100644 snowblocks/visual-studio-code/snippets/javascript.json create mode 100644 snowblocks/visual-studio-code/snippets/javascriptreact.json create mode 100644 snowblocks/visual-studio-code/snippets/markdown.json create mode 100644 snowblocks/visual-studio-code/snowblock.json create mode 100644 snowblocks/visual-studio-code/workspaces/development.code-workspace create mode 100644 snowblocks/visual-studio-code/workspaces/docs.code-workspace create mode 100644 snowblocks/visual-studio-code/workspaces/nord.code-workspace create mode 100644 snowflakes/visual-studio-code/extensions.json diff --git a/snowblocks/plank/launchers/igloo/atom.dockitem b/snowblocks/plank/launchers/igloo/atom.dockitem deleted file mode 100644 index 218481b..0000000 --- a/snowblocks/plank/launchers/igloo/atom.dockitem +++ /dev/null @@ -1,2 +0,0 @@ -[PlankDockItemPreferences] -Launcher=file:///home/arcticicestudio/.local/share/applications/atom.desktop diff --git a/snowblocks/plank/launchers/igloo/firefox-developer-edition.dockitem b/snowblocks/plank/launchers/igloo/firefox-developer-edition.dockitem new file mode 100644 index 0000000..d889caf --- /dev/null +++ b/snowblocks/plank/launchers/igloo/firefox-developer-edition.dockitem @@ -0,0 +1,2 @@ +[PlankDockItemPreferences] +Launcher=file:///usr/share/applications/firefox-developer-edition.desktop diff --git a/snowblocks/plank/launchers/igloo/visual-studio-code.dockitem b/snowblocks/plank/launchers/igloo/visual-studio-code.dockitem new file mode 100644 index 0000000..308cf8b --- /dev/null +++ b/snowblocks/plank/launchers/igloo/visual-studio-code.dockitem @@ -0,0 +1,2 @@ +[PlankDockItemPreferences] +Launcher=file:///usr/share/applications/visual-studio-code.desktop diff --git a/snowblocks/taskwarrior/scripts/open-note.sh b/snowblocks/taskwarrior/scripts/open-note.sh index ce03f11..7b8a3e1 100755 --- a/snowblocks/taskwarrior/scripts/open-note.sh +++ b/snowblocks/taskwarrior/scripts/open-note.sh @@ -50,7 +50,7 @@ open_notes() { declare -a local task_uuids local task_uuid local note_path="~/.task/notes" - local editor_cmd="atom -a" + local editor_cmd="code --add" local note_file_ext="md" for task_id in $@; do diff --git a/snowblocks/taskwarrior/taskopenrc b/snowblocks/taskwarrior/taskopenrc index 7c91695..358cbd7 100644 --- a/snowblocks/taskwarrior/taskopenrc +++ b/snowblocks/taskwarrior/taskopenrc @@ -14,6 +14,6 @@ #+------+ NOTES_FOLDER="~/.task/notes/" NOTES_EXT=".md" -NOTES_CMD="atom --add ~/.task/notes/$UUID.md" +NOTES_CMD="code --add ~/.task/notes/$UUID.md" PATH_EXT=/usr/share/taskopen/scripts diff --git a/snowblocks/taskwarrior/taskrc b/snowblocks/taskwarrior/taskrc index 2578c21..07dd694 100644 --- a/snowblocks/taskwarrior/taskrc +++ b/snowblocks/taskwarrior/taskrc @@ -42,6 +42,7 @@ context.igloo=project:igloo context.job=+job context.lumio=project:lumio context.nord=project:nord +context.nord-docs=project:nord-docs context.northem=project:northem context.private=+private context.snowsaw=project:snowsaw diff --git a/snowblocks/visual-studio-code/css/remove-action-button.css b/snowblocks/visual-studio-code/css/remove-action-button.css new file mode 100644 index 0000000..8bbc857 --- /dev/null +++ b/snowblocks/visual-studio-code/css/remove-action-button.css @@ -0,0 +1,29 @@ +/* + * Copyright (C) 2016-present Arctic Ice Studio + * Copyright (C) 2016-present Sven Greb + * + * Project: Nord Atom UI + * Repository: https://github.com/arcticicestudio/nord-atom-ui + * License: MIT + */ + +/* + * Removes unnecessary "action button" clutter. + * The functionality is available through keybindings and the command palette. + */ + +/* Hide action buttons placed next to sidebar view titles */ +[aria-label="Editor actions"] { + display: none !important; +} +[aria-label="Search actions"] { + display: none !important; +} +[aria-label="Extensions actions"] { + display: none !important; +} + +/* Hide action buttons placed in sidebar panel headers */ +.panel-header.expanded .actions { + display: none !important; +} diff --git a/snowblocks/visual-studio-code/keybindings.json b/snowblocks/visual-studio-code/keybindings.json new file mode 100644 index 0000000..43bfbfb --- /dev/null +++ b/snowblocks/visual-studio-code/keybindings.json @@ -0,0 +1,207 @@ +/* + * Copyright (C) 2016-present Arctic Ice Studio + * Copyright (C) 2016-present Sven Greb + * + * Project: igloo + * Repository: https://github.com/arcticicestudio/igloo + * License: MIT + */ +[ + /* +--- Editor Workflow ---+ */ + /* Duplicate lines */ + { + "key": "ctrl+shift+d", + "command": "editor.action.copyLinesDownAction" + }, + { + "key": "cmd+shift+d", + "command": "editor.action.copyLinesDownAction" + }, + + /* Move lines up and down */ + { + "key": "ctrl+up", + "command": "editor.action.moveLinesUpAction", + "when": "editorTextFocus && !editorReadonly" + }, + { + "key": "ctrl+cmd+up", + "command": "editor.action.moveLinesUpAction", + "when": "editorTextFocus && !editorReadonly" + }, + { + "key": "alt+up", + "command": "-editor.action.moveLinesUpAction", + "when": "editorTextFocus && !editorReadonly" + }, + { + "key": "ctrl+down", + "command": "editor.action.moveLinesDownAction", + "when": "editorTextFocus && !editorReadonly" + }, + { + "key": "alt+down", + "command": "-editor.action.moveLinesDownAction", + "when": "editorTextFocus && !editorReadonly" + }, + { + "key": "ctrl+cmd+down", + "command": "editor.action.moveLinesDownAction", + "when": "editorTextFocus && !editorReadonly" + }, + + /* Add multiple cursors. */ + { + "key": "ctrl+shift+up", + "command": "editor.action.insertCursorAbove", + "when": "editorTextFocus && !editorReadonly" + }, + { + "key": "ctrl+shift+down", + "command": "editor.action.insertCursorBelow", + "when": "editorTextFocus && !editorReadonly" + }, + + /* Toggle block commments for current selection */ + { + "key": "ctrl+shift+numpad_divide", + "command": "editor.action.blockComment", + "when": "editorTextFocus && !editorReadonly" + }, + { + "key": "cmd+shift+numpad_divide", + "command": "editor.action.blockComment", + "when": "editorTextFocus && !editorReadonly" + }, + { + "key": "ctrl+shift+a", + "command": "-editor.action.blockComment", + "when": "editorTextFocus && !editorReadonly" + }, + + /* +--- Extensions ---+ */ + /* [Markdown Preview Enhanced] */ + /* Open markdown preview tab */ + { + "key": "ctrl+shift+m", + "command": "markdown-preview-enhanced.openPreview", + "when": "editorLangId == 'markdown'" + }, + + /* [Projects+] */ + /* Open command palette to open project */ + { + "key": "ctrl+shift+alt+p", + "command": "projects.open" + }, + { + "key": "ctrl+alt+p", + "command": "-projects.open" + }, + /* Open command palette to add project folder to current workspace */ + { + "key": "ctrl+alt+p", + "command": "projects.addToWorkspace" + }, + + /* +--- UI ---+ */ + /* Toggle activity bar visibility */ + { + "key": "ctrl+shift+[Period]", + "command": "workbench.action.toggleActivityBarVisibility" + }, + { + "key": "cmd+shift+[Period]", + "command": "workbench.action.toggleActivityBarVisibility" + }, + + /* Show "quick open" command palette */ + { + "key": "ctrl+t", + "command": "workbench.action.quickOpen" + }, + { + "key": "cmd+t", + "command": "workbench.action.quickOpen" + }, + { + "key": "ctrl+t", + "command": "-workbench.action.showAllSymbols" + }, + { + "key": "cmd+t", + "command": "-workbench.action.showAllSymbols" + }, + { + "key": "ctrl+p", + "command": "-workbench.action.quickOpen" + }, + { + "key": "cmd+p", + "command": "-workbench.action.quickOpen" + }, + + /* Show symbols command palette for current file */ + { + "key": "ctrl+q", + "command": "workbench.action.gotoSymbol" + }, + { + "key": "ctrl+shift+o", + "command": "-workbench.action.gotoSymbol" + }, + /* Show symbols command palette for the complete workspace */ + { + "key": "ctrl+shift+q", + "command": "workbench.action.showAllSymbols" + }, + /* Show available code actions */ + { + "key": "shift+space", + "command": "editor.action.codeAction" + }, + /* Show available parameter hints */ + { + "key": "ctrl+shift+space", + "command": "editor.action.triggerParameterHints", + "when": "editorHasSignatureHelpProvider && editorTextFocus" + }, + { + "key": "ctrl+shift+space", + "command": "-editor.action.triggerParameterHints", + "when": "editorHasSignatureHelpProvider && editorTextFocus" + }, + + /* +--- Defaults ---+ */ + /* Disable all default keybindings to close the application window! */ + { + "key": "ctrl+q", + "command": "-workbench.action.quit" + }, + { + "key": "ctrl+shift+w", + "command": "-workbench.action.closeWindow" + }, + { + "key": "ctrl+p", + "command": "-workbench.action.quickOpenNavigateNextInFilePicker", + "when": "inFilesPicker && inQuickOpen" + }, + { + "key": "ctrl+w", + "command": "-workbench.action.closeWindow", + "when": "!editorIsOpen && !multipleEditorGroups" + }, + { + "key": "cmd+w", + "command": "-workbench.action.closeWindow", + "when": "!editorIsOpen && !multipleEditorGroups" + }, + + /* Disable line duplication shortcut in order to use custom keybinding. */ + { + "key": "shift+alt+down", + "command": "-editor.action.copyLinesDownAction", + "when": "editorTextFocus && !editorReadonly" + } +] diff --git a/snowblocks/visual-studio-code/locale.json b/snowblocks/visual-studio-code/locale.json new file mode 100644 index 0000000..3d9084a --- /dev/null +++ b/snowblocks/visual-studio-code/locale.json @@ -0,0 +1,15 @@ +/* + * Copyright (C) 2016-present Arctic Ice Studio + * Copyright (C) 2016-present Sven Greb + * + * Project: igloo + * Repository: https://github.com/arcticicestudio/igloo + * License: MIT + */ +{ + /* + * Defines the display language. + * See https://code.visualstudio.com/docs/getstarted/locales for details. + */ + "locale":"en" +} diff --git a/snowblocks/visual-studio-code/projects.json b/snowblocks/visual-studio-code/projects.json new file mode 100644 index 0000000..eb6aa37 --- /dev/null +++ b/snowblocks/visual-studio-code/projects.json @@ -0,0 +1,18 @@ +{ + "groups": [ + { + "name": "", + "projects": [] + } + ], + "projects": [ + { + "name": "playlists", + "path": "~/videos/playlists" + }, + { + "name": "scratchpad", + "path": "~/documents/scratchpad" + } + ] +} diff --git a/snowblocks/visual-studio-code/settings.json b/snowblocks/visual-studio-code/settings.json new file mode 100644 index 0000000..97bf5c8 --- /dev/null +++ b/snowblocks/visual-studio-code/settings.json @@ -0,0 +1,111 @@ +/* + * Copyright (C) 2016-present Arctic Ice Studio + * Copyright (C) 2016-present Sven Greb + * + * Project: igloo + * Repository: https://github.com/arcticicestudio/igloo + * License: MIT + */ +{ + /*+--- Core ---+*/ + "editor.accessibilitySupport": "off", + "editor.codeLens": true, + "editor.colorDecorators": true, + "editor.cursorBlinking": "phase", + "editor.emptySelectionClipboard": false, + "editor.fontFamily": "'Source Code Pro', 'Hack'", + "editor.fontSize": 20, + "editor.fontWeight": "500", + "editor.formatOnSave": true, + "editor.lightbulb.enabled": false, + "editor.multiCursorModifier": "ctrlCmd", + "editor.renderIndentGuides": false, + "editor.renderWhitespace": "all", + "editor.smoothScrolling": true, + "editor.snippetSuggestions": "top", + "editor.tabCompletion": "onlySnippets", + "editor.tabSize": 2, + "editor.wordWrapColumn": 120, + "explorer.autoReveal": false, + "explorer.openEditors.visible": 0, + "extensions.autoUpdate": false, + "extensions.closeExtensionDetailsOnViewChange": true, + "extensions.ignoreRecommendations": true, + "extensions.showRecommendationsOnlyOnDemand": true, + "files.associations": { + "*.jsx": "javascriptreact", + "*.js": "javascript" + }, + "files.eol": "\n", + "files.insertFinalNewline": true, + "problems.autoReveal": false, + "search.collapseResults": "alwaysCollapse", + "search.useGlobalIgnoreFiles": true, + "telemetry.enableCrashReporter": false, + "telemetry.enableTelemetry": false, + "terminal.explorerKind": "external", + "terminal.external.linuxExec": "tilix", + "terminal.external.osxExec": "iTerm.app", + "terminal.integrated.cursorStyle": "line", + "terminal.integrated.fontSize": 20, + "update.channel": "none", + "update.enableWindowsBackgroundUpdates": false, + "window.enableMenuBarMnemonics": false, + "window.menuBarVisibility": "hidden", + "window.titleBarStyle": "native", + "window.zoomLevel": 0.5, + "workbench.activityBar.visible": false, + "workbench.colorTheme": "Nord", + "workbench.commandPalette.preserveInput": true, + "workbench.editor.enablePreview": false, + "workbench.editor.enablePreviewFromQuickOpen": false, + "workbench.editor.focusRecentEditorAfterClose": false, + "workbench.enableExperiments": false, + "workbench.iconTheme": "eq-material-theme-icons-ocean", + "workbench.quickOpen.preserveInput": true, + "workbench.settings.enableNaturalLanguageSearch": false, + "workbench.sideBar.location": "left", + "workbench.startupEditor": "newUntitledFile", + "workbench.statusBar.feedback.visible": false, + + /*+--- Extensions ---+*/ + "eslint.autoFixOnSave": true, + "docker.showExplorer": false, + "go.autocompleteUnimportedPackages": true, + "go.coverageDecorator": { + "type": "highlight", + "coveredHighlightColor": "rgba(163, 190, 140, 0.45)", + "uncoveredHighlightColor": "rgba(191, 97, 106, 0.25)", + "coveredGutterStyle": "verticalgreen", + "uncoveredGutterStyle": "verticalred" + }, + "html.format.indentInnerHtml": true, + "javascript.preferences.quoteStyle": "double", + "markdown-preview-enhanced.enableExtendedTableSyntax": true, + "markdown.preview.breaks": true, + "markdown.preview.doubleClickToSwitchToEditor": false, + "markdown.preview.fontFamily": "-apple-system, BlinkMacSystemFont, Inter, sans-serif", + "markdown.preview.fontSize": 20, + "path-intellisense.showHiddenFiles": true, + "prettier.printWidth": 120, + "projects.checkPaths": true, + "projects.configPath": "~/.vscode/projects.json", + "projects.indentationSpaces": 2, + "projects.refreshDepth": 4, + "projects.refreshRoots": ["~/code/incubator", "~/code/job", "~/code/lab", "~/code/snippetbox", "~/yggdrasil"], + "projects.showDescriptions": false, + "projects.statusbarEnabled": false, + "rust-client.disableRustup": true, + "typescript.preferences.quoteStyle": "double", + "vscode_custom_css.imports": [ + "file:///home/arcticicestudio/.vscode/css/remove-action-button.css", + "file:///Users/sgreb/.vscode/css/remove-action-button.css" + ], + "vscode_custom_css.statusbar": false, + "yaml.format.enable": true, + + /*+--- Language Scopes ---+*/ + "[markdown]": { + "editor.quickSuggestions": false + } +} diff --git a/snowblocks/visual-studio-code/snippets/git-commit.json b/snowblocks/visual-studio-code/snippets/git-commit.json new file mode 100644 index 0000000..b5bc8dd --- /dev/null +++ b/snowblocks/visual-studio-code/snippets/git-commit.json @@ -0,0 +1,17 @@ +/* + * Copyright (C) 2016-present Arctic Ice Studio + * Copyright (C) 2016-present Sven Greb + * + * Project: igloo + * Repository: https://github.com/arcticicestudio/igloo + * License: MIT + */ + +/*+--- Commit Message ---+*/ +{ + "references": { + "prefix": "ref", + "body": ["References:", " (1) $0"], + "description": "A paragraph for references" + } +} diff --git a/snowblocks/visual-studio-code/snippets/javascript.json b/snowblocks/visual-studio-code/snippets/javascript.json new file mode 100644 index 0000000..ed29e16 --- /dev/null +++ b/snowblocks/visual-studio-code/snippets/javascript.json @@ -0,0 +1,70 @@ +/* + * Copyright (C) 2016-present Arctic Ice Studio + * Copyright (C) 2016-present Sven Greb + * + * Project: igloo + * Repository: https://github.com/arcticicestudio/igloo + * License: MIT + */ + +{ + /*+--- Assignments ---+*/ + "assignment-const-destruct": { + "prefix": "constd", + "body": "const { ${1:named} } = $0", + "description": "Creates and assigns a local variable using props destructing" + }, + + /*+--- Functions (ES6+) ---+*/ + "function-arrow": { + "prefix": "funca", + "body": "${1:exportStatements} const ${2:name} = ${3:async} (${4:parameters}) => {${0:body}}", + "description": "Creates a named arrow function in ES6 syntax" + }, + "function-declaration": { + "prefix": "func", + "body": ["${1:exportStatements} ${2:async} function ${3:name}(${4:parameters}) {\n", " $0\n", "}"], + "description": "Creates a named arrow function in ES6 syntax" + }, + + /*+--- Imports (ES6+) ---+*/ + "import": { + "prefix": "imp", + "body": "import ${1:exported} from \"${0:module}\"", + "description": "Imports default module export in ES6 syntax" + }, + "import-named": { + "prefix": "impn", + "body": "import { ${1:exported} } from \"${0:module}\"", + "description": "Imports named module in ES6 syntax" + }, + "require": { + "prefix": "req", + "body": "const ${$1:name} = require(\"${0:package}\");", + "description": "Require default package export" + }, + + /*+--- Logical Structures ---+*/ + "forEach": { + "prefix": "fore", + "body": ["${1:array}.forEach(${2:currentItem} => {\n", " $0\n", "});"], + "description": "Creates a forEach statement in ES6 syntax" + }, + + /*+--- Logging ---+*/ + "log": { + "prefix": "log", + "body": "console.log($0)", + "description": "Log to the console" + }, + "log-error": { + "prefix": "error", + "body": "console.error(\"$0\")", + "description": "Log error to the console" + }, + "log-warn": { + "prefix": "warn", + "body": "console.warn(\"$0\")", + "description": "Log warning to the console" + } +} diff --git a/snowblocks/visual-studio-code/snippets/javascriptreact.json b/snowblocks/visual-studio-code/snippets/javascriptreact.json new file mode 100644 index 0000000..1973b08 --- /dev/null +++ b/snowblocks/visual-studio-code/snippets/javascriptreact.json @@ -0,0 +1,34 @@ +/* + * Copyright (C) 2016-present Arctic Ice Studio + * Copyright (C) 2016-present Sven Greb + * + * Project: igloo + * Repository: https://github.com/arcticicestudio/igloo + * License: MIT + */ + +{ + /*+--- Hooks ---+*/ + "hooks-effect": { + "prefix": "he", + "body": ["useEffect(() => {", " $0", " return () => $2", "}, [${1:dependencies}]);"], + "description": "Create a effect hook" + }, + "hooks-state": { + "prefix": "hs", + "body": "const [${1:name}, set${2:setter}] = useState(${3:initialValue});", + "description": "Deconstruct the value and setter from a state hook" + }, + + /*+--- Styled Components ---+*/ + "styled-component-extending": { + "prefix": "stce", + "body": ["const ${1:name} = styled(${2:parentComponent})`", " $0", "`;"], + "description": "A styled component that extends another styled component" + }, + "styled-component-factory": { + "prefix": "stc", + "body": ["const ${1:name} = styled.${2:factory}`", " $0", "`;"], + "description": "A styled component using a HTML/SVG/XML element factory" + } +} diff --git a/snowblocks/visual-studio-code/snippets/markdown.json b/snowblocks/visual-studio-code/snippets/markdown.json new file mode 100644 index 0000000..c3ab32b --- /dev/null +++ b/snowblocks/visual-studio-code/snippets/markdown.json @@ -0,0 +1,39 @@ +/* + * Copyright (C) 2016-present Arctic Ice Studio + * Copyright (C) 2016-present Sven Greb + * + * Project: igloo + * Repository: https://github.com/arcticicestudio/igloo + * License: MIT + */ + +/*+--- Images ---+*/ +{ + "image": { + "prefix": "img", + "body": ["![${1:alt}](${0:url})"], + "description": "An inline image with alternative text" + }, + "image-reference": { + "prefix": "imgr", + "body": ["![${1:alt}][${0:url}]"], + "description": "An image reference with alternative text" + }, + + /*+--- Links ---+*/ + "link": { + "prefix": "l", + "body": ["[${1:text}](${0:url})"], + "description": "An inline link" + }, + "link-reference": { + "prefix": "lr", + "body": ["[${1:text}][${0:id}]"], + "description": "A link targeting a reference link" + }, + "reference-link": { + "prefix": "ref", + "body": ["[${1:id}]: ${0:url}"], + "description": "A reference link" + } +} diff --git a/snowblocks/visual-studio-code/snowblock.json b/snowblocks/visual-studio-code/snowblock.json new file mode 100644 index 0000000..baa6418 --- /dev/null +++ b/snowblocks/visual-studio-code/snowblock.json @@ -0,0 +1,89 @@ +[ + { + "clean": ["~/Library/Application Support/Code/User", "~/.config/Code/User", "~/.vscode"] + }, + { + "link": { + "~/.vscode/css": { + "create": true, + "force": true, + "hosts": { + "iceowl": "css", + "igloo": "css" + } + }, + "~/.config/Code/User/snippets": { + "create": true, + "force": true, + "hosts": { + "igloo": "snippets" + } + }, + "~/Library/Application Support/Code/User/snippets": { + "create": true, + "force": true, + "hosts": { + "iceowl": "snippets" + } + }, + "~/.vscode/workspaces": { + "create": true, + "force": true, + "hosts": { + "iceowl": "workspaces", + "igloo": "workspaces" + } + }, + "~/.config/Code/User/keybindings.json": { + "create": true, + "force": true, + "hosts": { + "igloo": "keybindings.json" + } + }, + "~/Library/Application Support/Code/User/keybindings.json": { + "create": true, + "force": true, + "hosts": { + "iceowl": "keybindings.json" + } + }, + "~/.config/Code/User/locale.json": { + "create": true, + "force": true, + "hosts": { + "igloo": "locale.json" + } + }, + "~/Library/Application Support/Code/User/locale.json": { + "create": true, + "force": true, + "hosts": { + "iceowl": "locale.json" + } + }, + "~/.vscode/projects.json": { + "create": true, + "force": true, + "hosts": { + "iceowl": "projects.json", + "igloo": "projects.json" + } + }, + "~/.config/Code/User/settings.json": { + "create": true, + "force": true, + "hosts": { + "igloo": "settings.json" + } + }, + "~/Library/Application Support/Code/User/settings.json": { + "create": true, + "force": true, + "hosts": { + "iceowl": "settings.json" + } + } + } + } +] diff --git a/snowblocks/visual-studio-code/workspaces/development.code-workspace b/snowblocks/visual-studio-code/workspaces/development.code-workspace new file mode 100644 index 0000000..2ed4cf8 --- /dev/null +++ b/snowblocks/visual-studio-code/workspaces/development.code-workspace @@ -0,0 +1,11 @@ +{ + "folders": [{ + "path": "/home/arcticicestudio/documents/scratchpad", + "name": "scratchpad" + }, + { + "path": "/home/arcticicestudio/videos/playlists", + "name": "playlists" + } + ] +} diff --git a/snowblocks/visual-studio-code/workspaces/docs.code-workspace b/snowblocks/visual-studio-code/workspaces/docs.code-workspace new file mode 100644 index 0000000..9d98bd1 --- /dev/null +++ b/snowblocks/visual-studio-code/workspaces/docs.code-workspace @@ -0,0 +1,11 @@ +{ + "folders": [{ + "name": "playlists", + "path": "../video/playlists" + }, + { + "name": "scratchpad", + "path": "../documents/scratchpad" + } + ] +} diff --git a/snowblocks/visual-studio-code/workspaces/nord.code-workspace b/snowblocks/visual-studio-code/workspaces/nord.code-workspace new file mode 100644 index 0000000..89b2ac4 --- /dev/null +++ b/snowblocks/visual-studio-code/workspaces/nord.code-workspace @@ -0,0 +1,143 @@ +{ + "folders": [{ + "name": "nord", + "path": "~/yggdrasil/nord/nord" + }, + { + "name": "nord-alacritty", + "path": "~/yggdrasil/nord/nord-alacritty" + }, + { + "name": "nord-atom-syntax", + "path": "~/yggdrasil/nord/nord-atom-syntax" + }, + { + "name": "nord-atom-ui", + "path": "~/yggdrasil/nord/nord-atom-ui" + }, + { + "name": "nord-brackets", + "path": "~/yggdrasil/nord/nord-brackets" + }, + { + "name": "nord-coda", + "path": "~/yggdrasil/nord/nord-coda" + }, + { + "name": "nord-conemu", + "path": "~/yggdrasil/nord/nord-conemu" + }, + { + "name": "nord-dircolors", + "path": "~/yggdrasil/nord/nord-dircolors" + }, + { + "name": "nord-docs", + "path": "~/yggdrasil/nord/nord-docs" + }, + { + "name": "nord-eclipse-syntax", + "path": "~/yggdrasil/nord/nord-eclipse-syntax" + }, + { + "name": "nord-emacs", + "path": "~/yggdrasil/nord/nord-emacs" + }, + { + "name": "nord-gedit", + "path": "~/yggdrasil/nord/nord-gedit" + }, + { + "name": "nord-gnome-terminal", + "path": "~/yggdrasil/nord/nord-gnome-terminal" + }, + { + "name": "nord-guake", + "path": "~/yggdrasil/nord/nord-guake" + }, + { + "name": "nord-highlightjs", + "path": "~/yggdrasil/nord/nord-highlightjs" + }, + { + "name": "nord-hyper", + "path": "~/yggdrasil/nord/nord-hyper" + }, + { + "name": "nord-iterm2", + "path": "~/yggdrasil/nord/nord-iterm2" + }, + { + "name": "nord-java", + "path": "~/yggdrasil/nord/nord-java" + }, + { + "name": "nord-jetbrains-editor", + "path": "~/yggdrasil/nord/nord-jetbrains-editor" + }, + { + "name": "nord-konsole", + "path": "~/yggdrasil/nord/nord-konsole" + }, + { + "name": "nord-mintty", + "path": "~/yggdrasil/nord/nord-mintty" + }, + { + "name": "nord-notepadplusplus", + "path": "~/yggdrasil/nord/nord-notepadplusplus" + }, + { + "name": "nord-putty", + "path": "~/yggdrasil/nord/nord-putty" + }, + { + "name": "nord-slack", + "path": "~/yggdrasil/nord/nord-slack" + }, + { + "name": "nord-sublime-text", + "path": "~/yggdrasil/nord/nord-sublime-text" + }, + { + "name": "nord-terminal-app", + "path": "~/yggdrasil/nord/nord-terminal-app" + }, + { + "name": "nord-terminator", + "path": "~/yggdrasil/nord/nord-terminator" + }, + { + "name": "nord-termite", + "path": "~/yggdrasil/nord/nord-termite" + }, + { + "name": "nord-tilix", + "path": "~/yggdrasil/nord/nord-tilix" + }, + { + "name": "nord-tmux", + "path": "~/yggdrasil/nord/nord-tmux" + }, + { + "name": "nord-vim", + "path": "~/yggdrasil/nord/nord-vim" + }, + { + "name": "nord-visual-studio-code", + "path": "~/yggdrasil/nord/nord-visual-studio-code" + }, + { + "name": "nord-xcode", + "path": "~/yggdrasil/nord/nord-xcode" + }, + { + "name": "nord-xfce-terminal", + "path": "~/yggdrasil/nord/nord-xfce-terminal" + }, + { + "name": "nord-xresources", + "path": "~/yggdrasil/nord/nord-xresources" + } + ] +} diff --git a/snowflakes/visual-studio-code/extensions.json b/snowflakes/visual-studio-code/extensions.json new file mode 100644 index 0000000..7ebd12c --- /dev/null +++ b/snowflakes/visual-studio-code/extensions.json @@ -0,0 +1,21 @@ +[ + "arcticicestudio.nord-visual-studio-code", + "be5invis.vscode-custom-css", + "christian-kohler.path-intellisense", + "dbaeumer.vscode-eslint", + "drewbourne.vscode-remark-lint", + "EditorConfig.EditorConfig", + "Equinusocio.vsc-material-theme-icons", + "esbenp.prettier-vscode", + "fabiospampinato.vscode-projects-plus", + "file-icons.file-icons", + "jpoissonnier.vscode-styled-components", + "mgmcdermott.vscode-language-babel", + "ms-vscode.Go", + "PeterJausovec.vscode-docker", + "pnp.polacode", + "Prisma.vscode-graphql", + "redhat.vscode-yaml", + "rust-lang.rust", + "shd101wyy.markdown-preview-enhanced" +] From 545df09676dbaa67f9810b6fa2a94005f0a529f8 Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Thu, 7 Mar 2019 09:48:44 +0100 Subject: [PATCH 165/214] Implement Git alias to list commits ahead/behind tracking branch There was only the `lnew` alias that lists commit behind `ORIG_HEAD` (1) which only works after a solved merge conflict. This is not very useful and has been replaced by two new aliases: - `lahead` - Lists all commits the current branch is ahead of the tracked origin branch that have not been pushed yet. - `lbehind` - Lists all ahead commits of the tracked origin branch that are not merged into the current branch yet. References: (1) https://git-scm.com/docs/gitrevisions#gitrevisions Resolves GH-180 --- snowblocks/git/gitconfig | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/snowblocks/git/gitconfig b/snowblocks/git/gitconfig index aa09e0f..43b36a1 100755 --- a/snowblocks/git/gitconfig +++ b/snowblocks/git/gitconfig @@ -408,6 +408,22 @@ # l = log --graph --pretty=format:'%C(cyan)%h %C(white)%s %C(cyan bold)%d' + # Lists all commits the current branch is ahead of the tracked origin branch that have not been pushed yet. + # + # Depends on: + # alias.l + # Usage: + # git lahead + lahead = ! git l @{u}..HEAD + + # Lists all ahead commits of the tracked origin branch that are not merged into the current branch yet. + # + # Depends on: + # alias.l + # Usage: + # git lbehind + lbehind = ! git l HEAD..@{u} + # Prints a prettified flat commit log without topic commits from merges. # # Depends on: @@ -443,14 +459,6 @@ # git lch | lch = ! git l $1..HEAD - # Lists all new commits after the fetch including stats. - # - # Depends on: - # alias.l - # Usage: - # git lnew - lnew = ! git l ORIG_HEAD.. --stat - # +----------------------+ # + Information - Status + # +----------------------+ From ef8c84d4a9a648cf0c08fce20aa1ff26d1989f00 Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Sun, 10 Mar 2019 09:38:49 +0100 Subject: [PATCH 166/214] Basic Go environment setup I started to use Go (1) as one of my main languages for many cases like CLI tools, backends with performance and inter compatibility in mind as well as daily tools. Go comes with a great toolchain that also doesn't require a lot of necessary setups, therefore this basic setup is enough to work efficiently in combination with the awesome IntelliJ Go plugin (2) and the great integration of Go in VS Code (3). This basic setup includes: - Setting the `GOPATH` envionment variable to the custom location at `$HOME/.go`. Even though that I only use Go Modules (4) this is required for backwards compatibility, the toolchain as well as the resulting binaries in `$GOPATH/bin`. - Add `$GOPATH/bin` to `$PATH` for all hosts. References: (1) https://golang.org (2) https://plugins.jetbrains.com/plugin/9568-go (3) https://code.visualstudio.com/docs/languages/go (4) https://github.com/golang/go/wiki/Modules Resolves GH-181 --- snowblocks/bash/config/env/iceowl | 2 ++ snowblocks/bash/config/env/igloo | 3 ++- snowblocks/bash/config/pkg/go | 16 ++++++++++++++++ .../plank/launchers/igloo/pycharm.dockitem | 2 -- 4 files changed, 20 insertions(+), 3 deletions(-) create mode 100644 snowblocks/bash/config/pkg/go delete mode 100644 snowblocks/plank/launchers/igloo/pycharm.dockitem diff --git a/snowblocks/bash/config/env/iceowl b/snowblocks/bash/config/env/iceowl index a1c7c1e..7e461b4 100644 --- a/snowblocks/bash/config/env/iceowl +++ b/snowblocks/bash/config/env/iceowl @@ -33,6 +33,7 @@ BREW_MANPATH_COREUTILS="/usr/local/opt/coreutils/libexec/gnuman" BREW_INFOPATH_BASE="/usr/local/share/info" PATH_BIN="~/.bin" +PATH_BIN_GO_WORKSPACE="$HOME/.go/bin" PATH_GIT_CONTRIB_DIFF_HIGHLIGHT="/usr/local/opt/git/share/git-core/contrib/diff-highlight" PATHS=( @@ -43,6 +44,7 @@ PATHS=( "$BREW_PATH_PYTHON" "$BREW_PATH_SQLITE" "$PATH_BIN" + "$PATH_BIN_GO_WORKSPACE" "$PATH_GIT_CONTRIB_DIFF_HIGHLIGHT" "$PATH" ) diff --git a/snowblocks/bash/config/env/igloo b/snowblocks/bash/config/env/igloo index ce3592b..f587d11 100644 --- a/snowblocks/bash/config/env/igloo +++ b/snowblocks/bash/config/env/igloo @@ -35,4 +35,5 @@ fi PATH_INTELLIJ_IDEA_U_HOME=/opt/intellij-idea-u/bin PATH_GIT_DIFF_HIGHLIGHT=/usr/share/git/diff-highlight PATH_BIN=~/.bin -export PATH="${PATH}:$JAVA_HOME/bin:$PATH_INTELLIJ_IDEA_U_HOME:$PATH_GIT_DIFF_HIGHLIGHT:$PATH_BIN" +PATH_BIN_GOLANG_WORKSPACE="$HOME/.go/bin" +export PATH="${PATH}:$JAVA_HOME/bin:$PATH_INTELLIJ_IDEA_U_HOME:$PATH_GIT_DIFF_HIGHLIGHT:$PATH_BIN:$PATH_BIN_GOLANG_WORKSPACE" diff --git a/snowblocks/bash/config/pkg/go b/snowblocks/bash/config/pkg/go new file mode 100644 index 0000000..885c368 --- /dev/null +++ b/snowblocks/bash/config/pkg/go @@ -0,0 +1,16 @@ +#!/usr/bin/env bash + +# Copyright (C) 2016-present Arctic Ice Studio +# Copyright (C) 2016-present Sven Greb + +# Project: igloo +# Repository: https://github.com/arcticicestudio/igloo +# License: MIT + +# Configures the Go development environment. +# +# @see https://golang.org/doc/code.html#GOPATH +# @see https://github.com/golang/go/wiki/GOPATH +# @see https://github.com/golang/go/wiki/SettingGOPATH + +export GOPATH="$HOME/.go" diff --git a/snowblocks/plank/launchers/igloo/pycharm.dockitem b/snowblocks/plank/launchers/igloo/pycharm.dockitem deleted file mode 100644 index 84149c3..0000000 --- a/snowblocks/plank/launchers/igloo/pycharm.dockitem +++ /dev/null @@ -1,2 +0,0 @@ -[PlankDockItemPreferences] -Launcher=file:///usr/share/applications/pycharm.desktop From 55795b26f785127f1e73b443b20cf5422afda6a8 Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Sun, 10 Mar 2019 21:00:17 +0100 Subject: [PATCH 167/214] IntelliJ 2018.3.5 The previously used target version was IntelliJ 2018.2 which has been updated to the latest version IntelliJ 2018.3.5. This includes new configurations as well as the obligatory adjustment for the correct target paths `~/.IntelliJIdea2018.3` (Linux) and `~/Library/Preferences/IntelliJIdea2018.3` (macOS). Resolves GH-182 --- snowblocks/jetbrains/README.md | 30 +- .../jetbrains/codestyles/arctic-codestyle.xml | 41 +- snowblocks/jetbrains/disabled_plugins.txt | 25 +- snowblocks/jetbrains/disabled_update.txt | 0 .../inspection/arctic-inspections.xml | 78 +-- .../jetbrains/keymaps/arctic-keymap.xml | 38 +- .../jetbrains/options/customization.xml | 571 +++++++++++++++++- .../jetbrains/options/editor.codeinsight.xml | 1 + snowblocks/jetbrains/options/editor.xml | 13 +- snowblocks/jetbrains/options/goLibraries.xml | 17 + snowblocks/jetbrains/options/ide.general.xml | 2 +- snowblocks/jetbrains/options/keymap.xml | 2 +- .../jetbrains/options/project.default.xml | 18 +- snowblocks/jetbrains/options/ui.lnf.xml | 9 +- snowblocks/jetbrains/snowblock.json | 92 ++- 15 files changed, 765 insertions(+), 172 deletions(-) create mode 100644 snowblocks/jetbrains/disabled_update.txt create mode 100644 snowblocks/jetbrains/options/goLibraries.xml diff --git a/snowblocks/jetbrains/README.md b/snowblocks/jetbrains/README.md index af6d018..ae2f6b2 100644 --- a/snowblocks/jetbrains/README.md +++ b/snowblocks/jetbrains/README.md @@ -6,18 +6,19 @@ This snowblock provides all important configurations for all used [JetBrains][] The includes configurations are mostly platform and IDE/product independent. -* The [code style][intellij-doc-code-style] XMl configuration file stored in the `codestyles` folder. -* The [inspections][intellij-doc-inspections] XMl configuration file stored in the `inspections` folder. -* The [keymaps][intellij-doc-keymap] XMl configuration files for Linux and macOS stored in the `keymaps` folder. See the [keymap reference][intellij-doc-keymap-ref] for a visual presentation of the default mappings. -* The [preference][intellij-doc-prefs] XMl configuration files are stored in the `options` folder: - * `code.style.schemes.xml` - settings of the currently used code style. - * `colors.scheme.xml` - settings of the currently used color scheme. - * `customization.xml` and `project.default.xml` - settings of the customized [menus and toolbars][intellij-doc-menu-toolbar]. - * `editor.codeinsight.xml` - settings of various automatic code transformations. - * `keymap.xml` - the currently used keymap. - * `laf.xml` and `ui.lnf.yml` - settings of the currently used UI theme. - * all other customized preferences defined in the various categories: `editor.xml`, `ide.general.xml` and `options.xml` -* The list of [disabled plugins][intellij-doc-plugins] stored in the `disabled_plugins.txt` file. +- The [code style][intellij-doc-code-style] XMl configuration file stored in the `codestyles` folder. +- The [inspections][intellij-doc-inspections] XMl configuration file stored in the `inspections` folder. +- The [keymaps][intellij-doc-keymap] XMl configuration files for Linux and macOS stored in the `keymaps` folder. See the [keymap reference][intellij-doc-keymap-ref] for a visual presentation of the default mappings. +- The [preference][intellij-doc-prefs] XMl configuration files are stored in the `options` folder: + - `code.style.schemes.xml` - settings of the currently used code style. + - `colors.scheme.xml` - settings of the currently used color scheme. + - `customization.xml` and `project.default.xml` - settings of the customized [menus and toolbars][intellij-doc-menu-toolbar]. + - `editor.codeinsight.xml` - settings of various automatic code transformations. + - `keymap.xml` - the currently used keymap. + - `laf.xml` and `ui.lnf.yml` - settings of the currently used UI theme. + - all other customized preferences defined in the various categories: `editor.xml`, `ide.general.xml` and `options.xml` +- The list of [disabled plugins][intellij-doc-plugins] stored in the `disabled_plugins.txt` file. +- The `disabled_update.txt` state file to [disable auto updates][intellij-doc-autoupdate]. ## Configurations @@ -50,15 +51,16 @@ The base target folder name for the `clean` and `link` plugins must be updated a [gh-igloo-sb-jb-editor.xml]: https://github.com/arcticicestudio/igloo/blob/develop/snowblocks/jetbrains/ooptions/editor.xml [goland]: https://www.jetbrains.com/go [google-font-source-code-pro]: https://fonts.google.com/specimen/Source+Code+Pro -[intellij]: https://www.jetbrains.com/idea +[intellij-doc-autoupdate]: https://www.jetbrains.com/help/idea/keep-product-up-to-date.html#manage_updates_manually [intellij-doc-code-style]: https://www.jetbrains.com/help/idea/settings-code-style.html [intellij-doc-inspections]: https://www.jetbrains.com/help/idea/inspections-settings.html -[intellij-doc-keymap]: https://www.jetbrains.com/help/idea/settings-keymap.html [intellij-doc-keymap-ref]: https://www.jetbrains.com/help/idea/keymap-reference.html +[intellij-doc-keymap]: https://www.jetbrains.com/help/idea/settings-keymap.html [intellij-doc-menu-toolbar]: https://www.jetbrains.com/help/idea/menus-and-toolbars.html [intellij-doc-plugins]: https://www.jetbrains.com/help/idea/managing-plugins.html [intellij-doc-prefs]: https://www.jetbrains.com/help/idea/settings-preferences-dialog.html [intellij-doc-settings-paths]: https://intellij-support.jetbrains.com/hc/en-us/articles/206544519-Directories-used-by-the-IDE-to-store-settings-caches-plugins-and-logs +[intellij]: https://www.jetbrains.com/idea [jetbrains]: https://www.jetbrains.com/products.html [pycharm]: https://www.jetbrains.com/pycharm [webstorm]: https://www.jetbrains.com/webstorm diff --git a/snowblocks/jetbrains/codestyles/arctic-codestyle.xml b/snowblocks/jetbrains/codestyles/arctic-codestyle.xml index 3761a7b..cf3fdd7 100644 --- a/snowblocks/jetbrains/codestyles/arctic-codestyle.xml +++ b/snowblocks/jetbrains/codestyles/arctic-codestyle.xml @@ -15,24 +15,30 @@ License: MIT

+

-

+# 0.1.0 ---- +![Release Date: 2020-04-05](https://img.shields.io/badge/Release_Date-2020--04--05-88C0D0.svg?style=flat-square) [![Project Board](https://img.shields.io/badge/Project_Board-0.1.0-88C0D0.svg?style=flat-square)](https://github.com/arcticicestudio/igloo/projects/2) [![Milestone](https://img.shields.io/badge/Milestone-0.1.0-88C0D0.svg?style=flat-square)](https://github.com/arcticicestudio/igloo/milestone/1) -# 0.0.0 -*2017-01-07* -**Project Initialization** +## Historical Background + +Back on January 7 2017, this repository was created in order to open source my _dotfiles_ that were stored and managed in a private repository on my server back then. The intention was to allow other to learn and use these files or even contribute back even though most of the time preferences and configurations are shaped for personal use. I also liked the great idea of the [“GitHub does dotfiles“][gh-dotfiles] project and the fact that a public repository makes it way easier for me to setup and bootstrap a new system without the requirement to configure and connect to my VPN before being able to clone and use my _dotfiles_. + +Since then this repository changed a lot regarding the structure and data, forming my “digital source-of-truth“ for my systems. The main targets hosts were `illuvigaq` (later on [renamed to `igloo`][gh-10]) and `archbook` where the later was [replaced with `iceowl`][gh-143] later on by switching from _Arch Linux_ running on a _MacBook Pro 11,2 (2016)_ to [_macOS_ on a new _MacBook Pro 15,2 (2018)_][gh-131]. +Even though updates are documented and merged through an organized workflow, the repository was more like a constantly changing and moving kind of cache to keep the _dotfiles_ reasonably maintainable and in sync between the systems. + +The goal was to use the files in daily business, improve up on these usage experiences and finally persist the configurations into this repository. This is the way this repository was used for almost over 3 years and it worked reasonably well, but there are plans for a refactoring of the structure and workflow. In order to clarify this goal release version 0.1.0 is going to set a imaginary marker line in the repository history to persist and document the current repository state. + +The following sections provide detailed documentations about all the _snowblocks_, _snowflakes_ and everything else that has been done to build up the current _dotfile_ state. + +## Repository Structure + +**Bootstrap script** — #1 (⊶ b516e30a) + +↠ Implemented the `bootstrap` shell script to run [snowsaw][] with the following configurations: + +- `SNOWSAW_DIR=.snowsaw` — Path to the _snowsaw_ submodule. +- `SNOWSAW_BIN=.bin/snowsaw` — Path to the _snowsaw_ binary. +- `SNOWBLOCKS_BASE_DIR_NAME=snowblocks` — Name of the base `snowblock` directory. +- `SNOWBLOCKSDIR=.` — Relative path of the current working directory the `bootstrap` script runs in. + +The actual execution command `"${SNOWSAW_DIR}/${SNOWSAW_BIN}" -s "${SNOWBLOCKSDIR}"` allows to add additional options by passing parameters through via `"${@}"`. + +**MIT license migration** — #59 ⇄ #60 (⊶ 11c003ec) + +↠ Before the project code was licensed under the [Apache 2.0][apache-license] license. This often causes problems when developers want to use the project or code parts of it in another project licensed under a less restricted license. +The project migrated to the [MIT license][choosealicense-mit] which is more open, unrestricted and the most used license for open source projects like [React][] which has also recently been [re-licensed][fb-code-blog-react_relicense]. + +**Updated copyright comment header** — #123 (⊶ 2e4d6946) + +↠ Before some files still used a “hard-coded“ copyright year that has now been changed to use the `-present` pattern in order to prevent unnecessary overhead on each year change. +Also the copyright email for „Sven Greb“ was invalid and has been updated to the valid address. + +## _Snowblocks_ + +### Git — #2 (⊶ fd43bdac) + +↠ Initially `snwoblocks/git` for [Git][] provided the following files & directories linked to their destination: + +- `gitconfig` → `~/.git-commit-msg` +- `gitignore` → `~/.gitignore` +- `gitconfig_auth` → `~/.gitconfig_auth` (initially **not** tracked by Git but only created and linked locally) +- `git-commit-msg` → `~/.git-commit-msg` + +Over the time the `git` _snowblock_ evolved through the following changes: + +1. **Conditional configuration inclusion** #23 ⇄ #27 (⊶ 427e6cb5) + ↠ The new [conditional configuration `includes`][git-docs-config#incl] Git feature was introduced in version [2.13][gh-blog-git-2.13] provides a comfortable way to automatically load different configurations based on the current path of the repository. + Many path specific projects have been added to to allow to split the main- and job authentication configurations. + Also see the following related changes: + + - **Conditional configuration includes for "gitlab" and "incubator"** #97 ⇄ #101 (⊶ eca02520) + ↠ Added [conditional configuration `includes`][gh-blog-git-2.13#cond_incl] for the `gitlab` and `incubator` directories using the default main Git configuration. + - **New conditional authentication configuration `include`** #120 (⊶ 36970049) + ↠ Ensured all _communikey_ projects are configured to use the `svengreb` Git user a new conditional include for the `~/code/github/repositories/communicode/` path(s). + - **New conditional authentication config `include`** #171 (⊶ 631ab5f1) + ↠ Ensured all projects by [@svengreb][gh-user-svengreb] are committed with the correct Git credentials a new conditional `include` for the `~/yggdrasil/svengreb/` path has been added. + +2. **Simplified branch printing aliases** #25 ⇄ #28 (⊶ 427e6cb5) + ↠ The branch printing aliases `b` and the extended aliases `bum` and `bm` have been simplified by removing unnecessary flags: + + - The `--list` flag is used to list branches matching a specific pattern. + - Removed `-v`/`-vv`/`--verbose` which shows the commit SHA1 and subject line after each branch. + +3. **Improved logging alias formats** #24 ⇄ #29 (⊶ a316d775) + ↠ The defined ASCII colors codes for the output have been changed to adapt to the terminal colors theme/scheme. + The format has also been simplified and minimized/reduced to relevant information except the extended `ll` and `llf` aliases. + Added the new shorthand aliases `lf` and `llf` were added for a flattened output without topic commits from merges and adapted the style to the existing `lnew` and `lch` aliases. The `lr` alias is now superfluous and has been removed due to the new `ll` and `llf` aliases which include the relative date of a commit. + +4. **Long GPG `keyid` format for Git configuration** #50 ⇄ #54 (⊶ a4065f5d) + ↠ The GPG [`keyid-format`][gpg-docs-conf_opts] has been changed from `short` to `long`. + +5. **Adapted Git commit message template to style guide** #51 ⇄ #55 (⊶ 272d1bff) + ↠ The Git commit message template content was outdated and has been updated to adapt to the new [Git Style Guide][arcticicestudio/styleguide-git]. + +6. **Transparent Git encryption using GPG** #64 ⇄ #69 (⊶ 32c24ceb) + → **Replaced by #113 ⇄ #114 later on!** + ↠ Added a global `.gitattributes` file and configured the global `.gitconfig` file to apply a transparent git encryption with `smudge` and `clean` filters using [GPG]. + In the `.gitattributes` file, a filter for all `*.igloocrypt` file extensions was set. The `.gitconfig` now includes the filter configuration by using `gpg` for the encryption and decryption, processing files just before they‘re checked out and just before they’re staged. Also see GitHub _Gist_ [“Transparent Git encryption with `smudge` & `clean` filters using GPG“][gist-git_smudge_clean] for more details. + ![](https://git-scm.com/book/en/v2/images/smudge.png) + ![](https://git-scm.com/book/en/v2/images/clean.png) + 6.1 **Migration to `git-crypt`** #113 ⇄ #114 (⊶ 4bb0d48e) + ↠ In #64 the concept was described as a simpler and cleaner solution instead of adding a using a tool like [git-crypt][] with the reason that this would make the encryption usage dependent on an external tool and also commits additional files to the repository like the `.git-crypt` folder in the root of the repository. It was also documented that such tools are really useful and necessary when the repository is used by many collaborator, but only adds overhead for personal _dotfile_ repositories. + Anyway, the transparent Git encryption introduced to [GPG] encrypt specific files using the `smudge` and `clean` filters only worked reasonably well with various problems, e.g. caused files to be flagged as „dirty“ (modified) after checkout even if there have been no changes. The pure Git builtin solution with filters was chosen to prevent dependence to external tools, but the latest release versions of Git causing more and more problems due to changes in the behavior e.g. [how `git diff` works][git-docs-diff] (also causing `diff-so-fancy` to be broken). + Therefore the previously implemented solution has been removed again and, against contrary to the opinion in #64, migrated to use [git-crypt][] instead. Even if this added additional files to the repository as well as the external dependency to the tool itself, `git-crypt` is a stable and production proven concept that works safely and allows to really use a transparent encryption. + After playing around and testing `git-crypt` locally the resulting migration steps were as follows: + + - **1** Deleted the custom [`git-diff-igloocrypt`](https://github.com/arcticicestudio/igloo/blob/8e47b174e586694bf4e882575b1931bbd27013d7/snowblocks/git/git-diff-igloocrypt) script. + - **2** Removed the custom [`[diff "igloocrypt"]`](https://github.com/arcticicestudio/igloo/blob/8e47b174e586694bf4e882575b1931bbd27013d7/snowblocks/git/gitconfig#L57-L58) section from the `gitconfig` file. + - **3** Removed the custom filter [`"igloocrypt"`](https://github.com/arcticicestudio/igloo/blob/8e47b174e586694bf4e882575b1931bbd27013d7/snowblocks/git/gitconfig#L73-L75) from the `gitconfig` file. + - **4** Updated the `filter` and `diff` custom global Git attributes handler for all `*.igloocrypt` files to the new `git-crypt` setup. + - **5** Decrypted all `*.igloocrypt` files and backup them up outside the repository. + - **6** Deleted all `*.igloocrypt` files within the repository. + - **7** Initialized `git-crypt` for the repository: `git-crypt init` (default key). + - **8** Added the main Arctic Ice Studio GPG key: `git-crypt add-gpg-user -n ` (`-n` flag prevents automatic commit of generated files). + - **9** Committed the newly generated `.git-crypt` folder. + - **10** Unlocked the repository: `git-crypt unlock`. + - **11** Added all backed up `*.igloocrypt` files back into the repository. + - **12** Ensured all `*.igloocrypt` are tracked to be encrypted: `git-crypt status`. + - **13** Committed all `*.igloocrypt` files. + - **14** Validated the encryption works by locking the repository again: `git-crypt lock`. + +7. **Revised commit message template** #26 (⊶ 8eee3520) + ↠ The Git commit message template contained an deprecated format and have been rewritten from scratch to match the new Arctic Ice Studio [Git Style Guide][arcticicestudio/styleguide-git]. + +8. **`diff-so-fancy` compatible `format-patch` alias** #84 ⇄ #87 (⊶ b9437b57) + ↠ Added a new `fp` ("_format patch_") alias to fix a output problem when using [diff-so-fancy][] with the the `format-patch` command which also prints the ANSI color sequences. This is now prevented by using the `--no-color` option of `git diff`. + The alias now also contains the `--patch-with-stat` option to add additional patch stats like the total amount of changed/removed lines. + +9. **`diff-so-fancy` for `git add` interactive/patch mode** #63 ⇄ #91 (⊶ 82d8cfd9) + ↠ Git [2.14.0][git-rln-2.14.0] includes a restructuring of `diff-highlight` (_contrib/_) for a easier reuse by [diff-so-fancy][]. `diff-so-fancy` for the `git add` interactive/patch mode is now used for the `interactive.diffFilter` configuration. Also the [so-fancy/diff-so-fancy#35 (comment)][so-fancy/diff-so-fancy#35-c] for more details. + Also see the following related changes: + + - **Temporary replace `diff-so-fancy` with bundled `diff-highlight`** #125 (⊶ 535cb0a6) + → See [so-fancy/diff-so-fancy#35][] and [so-fancy/diff-so-fancy#296][] for more details. + ↠ The reason are incompatibility problems of [diff-so-fancy][] with the latest Git versions caused by changes in the diff logic. + + ```raw + fatal: mismatched output from interactive.diffFilter + hint: Your filter must maintain a one-to-one correspondence + hint: between its input and output lines. + ``` + + **NOTE**: Downgrading to a compatible Git version is not an option because [versions <2.17.1 are effected by _CVE-2018-11233_ and and _11235_][git-rln-2.17.1#cve]. + To fix this problem for [interactive patch mode](https://github.com/arcticicestudio/igloo/blob/bb19634544f91c26d66e1f7f53a6bf06210fbaaf/snowblocks/git/gitconfig#L214-L220) the filter was temporary changed to the official [diff-highlight][] tool bundled with Git. + + ```diff + [interactive] + - diffFilter = diff-so-fancy + + diffFilter = diff-highlight + ``` + +10. **Host specific and encrypted user configurations** #93 ⇄ #94 (⊶ 1b564fc5) + ↠ The [`gitconfig_auth`](https://github.com/arcticicestudio/igloo/blob/develop/snowblocks/git/gitconfig_auth) file was previously linked for all hosts and were limited to the hosts `igloo` and `archbook`. Also the `gitconfig_auth_job` file [was ignored](https://github.com/arcticicestudio/igloo/blob/develop/.gitignore#L8) and has been added in encrypted `.igloocrypt` format to the _snowblock_. + Also see the following related changes: + + - **Fixed invalid file symlink targets for Git authentication configurations** #116 (⊶ 6cb11653) + ↠ The Git authentication configurations were updated to be encrypted, but the targets for the symlinks configured within the `snowblock.json` have not been updated to match this change. + +11. **Autocorrect command typos** #150⇄ #157 (⊶ 19a89e2a) + ↠ The [`help.autocorrect`][git-docs-conf#autocorr] configuration allows to run auto-corrected commands with a specified delay time (seconds) after the info message has been shown. This has been added and set to a value of `10` (1 second). + +12. **Git alias to list commits ahead/behind tracking branch** #180 (⊶ 545df096) + ↠ Before only the `lnew` alias was available to list commits behind [`ORIG_HEAD`][git-docs-revs] which only worked after a solved merge conflict. This was not very useful and has been replaced by two new aliases: + + - `lahead` — Lists all commits the current branch is ahead of the tracked origin branch that have not been pushed yet. + - `lbehind` — Lists all ahead commits of the tracked origin branch that are not merged into the current branch yet. + +13. **Fixed invalid exit code handling for IntelliJ `mergetool`** #206 (⊶ 81734203) + ↠ When using IntelliJ as `mergetool` and setting `mergetool.intellij.trustExitCode` to `true`, the `mergetool.intellij.cmd` gets called for all files immediately. After IntelliJ gets closed for the first processed file, all other calls will error because the temporary files passed to `idea merge` as parameters are not valid anymore causing the app to exit. + The problem was that Git is not able to interpret or track started IntelliJ process and fails to listen for the exit code, causing the calls to be fired immediately. This problem was narrowed down to macOS while it works fine for Linux systems. See the [official Git documentation about the `mergetool` command][git-docs-mergetool] for more details. + To fix the problem the `mergetool.intellij.trustExitCode` option was set to `false` and `mergetool.intellij.prompt` to `true` to force Git to wait for the user to confirm the merge is completed and the app window has been closed before continuing with the next queued file. + The only impact is that it requires to press `y` or `n` after solving a conflict instead of only closing the app window and waiting for it to reopen again for the next file. This is also limited to macOS so the impact is very small compared to the broken state when not applying the fix. + In order to dynamically apply the configurations only for macOS systems a `[include]` block is used and set the path to a additional file that will only be linked by _snowsaw_ for macOS based hosts. + Note that the `include` statement/block **must be placed at the bottom** of the main Git configuration file in order to override the initial/default block! + +14. **Git alias for _squash_ merging** #208 (⊶ 78ccf4c7) + ↠ Before only the `m` alias was available to merge the specified branch in non-fast-forward mode. To do a ["squash" merge][ghh-prs#squash] a new `ms` alias has been added using the default fast-forward mode. + +15. **Replaced/Updated `archbook` with new `iceowl` host** #143, #131 (⊶ c08ca24c) + ↠ There were [various _snowblock_/_snowflake_ configurations that contained the `archbook` host](https://github.com/search?l=&q=archbook+repo%3Aarcticicestudio%2Figloo+created%3A%3E2018-09-18&type=Code) which doesn't exist anymore and has been replaced in most cases with the new `iceowl` host. In cases where the _snowblock_/_snowflake_ is only targeted for Linux the `archbook` host has been removed to make it independent from the host. They can be updated when a new Linux host might be introduced. + +### Vim — #3 (⊶ 3e5b053c) + +↠ Initially `snwoblocks/vim` for [Vim][] provided the following files & directories linked to their destination: + +- `vimrc` → `~/.vimrc` + +Over the time the `vim` _snowblock_ evolved through the following changes: + +1. **Paste toggle key mapping** #16 (⊶ 57e84f59) + ↠ Added `` key as toggle for the [`pastetoggle`][vimdoc-opts#pastetoggle] option. + +2. **Automatically wrap left and right** #22 ⇄ #30 (⊶ 60895adc) + ↠ Allowed to move the cursor to the previous/next line after reaching first/last character in the line using the the left < and > arrow keys in normal-, insert- (`<,>`) and visual mode (`[,]`) or the h and l keys. This is configured through the `whichwrap` variable. See `:help whichwrap` for more details. + +3. **Key mapping to move current line and selected block** #21 ⇄ #31 (⊶ ed36f3b9) + ↠ Added a key mapping that allows to easily move the current line or selected block(s) using the Ctrl and the _up_ and _down_ keys. The moved line/block adapts to the new indentation and is available in the `NORMAL`, `INSERT` and `VISUAL` modes. + +4. **Auto toggle sign column** #32 ⇄ #33 (⊶ e08a7767) + ↠ Vim 8 introduced a new option to configure the state of the sign column to be always visible (`yes`), always hidden (`no`) or to automatically toggle (`auto`) when signs are available to display. + This improvement is related to the warning message added to [airblade/vim-gitgutter@dc73a81][] which also advises to remove the custom option `g:gitgutter_sign_column_always = 1` and use `set signcolumn = auto` instead, described by the plugin owner in [airblade/vim-gitgutter#431 (comment)][airblade/vim-gitgutter#431-c-sigcol]. Also see `:help signcolumn` for more details. + +5. **Remap syntax highlighting function** #36 ⇄ #39 (⊶ 474b9b90) + ↠ The `` mapping for the function to show the syntax highlighting groups for the current cursor position collided with the AUR package [plotinus-git][aur-plotinus-git] which provides a searchable command palette in every modern GTK+ application. Is uses the commonly known Control + Shift + P key mapping. The terminal emulator [Tilix][] is a GTK3 application so the command bar is available and has a higher priority as the mapping for the function. + The key mapping for the function was changed to use the K key instead of P. + +6. **Enable 24bit true color support** #37 ⇄ #40 (⊶ 54c35959) + ↠ The `termguicolors` option has been added to enable support for [24bit true colors][gist-term_colors]. This is necessary to use the Nord Vim _Custom Comment Brightness_ theme feature which makes use of HEX defined colors.**NOTE**: This change has been made obsolete later due to the deprecation of the _comment contrast_ option in _Nord Vim_ through the following change: **Comment Color Brightness** [arcticicestudio/nord-vim#145][] ⇄ [arcticicestudio/nord-vim#146][] (⊶ [arcticicestudio/nord-vim@9e0249ca][]) + +7. **Markdown plugin `plasticboy/vim-markdown`** #38 ⇄ #41 (⊶ c2d9cb4a) + ↠ The [plasticboy/vim-markdown][] plugin extends the syntax highlighting support and provides additional features compared to the default syntax definitions. + Also see the following related changes: + + - **Remove Markdown plugin plasticboy/vim-markdown"** #129 (⊶ ff85c3d0) + ↠ Removed the [plasticboy/vim-markdown][plasticboy/vim-markdown] plugin (added in #38) again. The default Markdown syntax has been updated and now also supports many (non-standard) Markdown extensions while the plugin causes some compatibility problems. + +8. **Replace unmaintained vim-coloresque plugin** #42 ⇄ #46 (⊶ c70a440a) + ↠ The [gko/vim-coloresque][] was not actively developed anymore and conflicted with other plugins and has therefore been replaced with the active fork [ap/vim-css-color][]. + +9. **Add `vim-livedown` plugin** #45 ⇄ #47 (⊶ 39480637) + ↠ The [shime/vim-livedown][] plugin adds support for [Livedown][] (Live Markdown Previews) for Vim. + It requires the [`livedown`][npm-livedown] NPM package to be **globally** available! + +10. **JSX syntax highlighting and indentation plugin** #44 ⇄ #48 (⊶ e940c244) + ↠ The [mxw/vim-jsx][] plugin adds syntax highlighting and indenting support for JSX. It is **not a standalone JavaScript plugin** and must be used with a base JS highlighter and integrates with the currently used and recommended [pangloss/vim-javascript][] plugin (vim-jsx's "official" dependency). + The `g:jsx_ext_required` configuration has been set to `0` to also enable JSX syntax highlighting in `.js` files. + +11. **Remove default enabled "list" option** #72 ⇄ #73 (⊶ 6c823718) + ↠ Before the `list` option was enabled by default, but has been disabled due to problems when using copy & paste within _Vim_ with OS- or terminal emulator specific functionalities. + +12. **"NERD Commenter" plugin** #71 ⇄ #75 (⊶ 4ab5c4be) + ↠ Added the [NERD Commenter][nerdcommenter] plugin that configures hotkeys to dynamically comment with language syntax awareness. + The `NERDSpaceDelims` config has been enabled to automatically add spaces after comment delimiters. + +13. **macOS compatibility for line- and block movement keymappings** #172 (⊶ 59a5cc50) + ↠ The key mappings implemented in #31 worked fine on Linux systems, but conflicted with a global (non-modifiable) system key mapping on macOS. Therefore a condition check for the currently running environment is now used to set other specific key mappings for macOS and Linux. + +### Bash — #4 (⊶ 0b664c78) + +↠ Initially `snwoblocks/bash` for [Bash][] provided the following files & directories linked to their destination: + +- `bootstrap` → `~/.bash_profile` +- `bootstrap` → `~/.bashrc` + +Over the time the `bash` _snowblock_ evolved through the following changes: + +1. **Fixed invalid logging directory creation** #5 (⊶ 374f7b7b) + ↠ Removed the remaining code fragment from the old bash framework version causing a `/.log directory can not be created: Permission denied` error message during the bootstrap process. + The `__snowblock_bash::setup_history()` function now also only creates the `.log` directory if it does not exists yet to avoid possible errors. + +2. **`dircolors` color theme** #6 (⊶ 6ab88b9d) + ↠ Added a `dircolors` package configuration to load the `~/.dir_colors` color theme on initialization. + +3. **Fix invalid filename for local `igloo` environment configuration** #7 (⊶ 250bb72e) + ↠ The local untracked environment configuration file `igloo.local` was not sourced caused by the wrong filename [`igloo.env.local`](https://github.com/arcticicestudio/igloo/commit/802258472da1afc0089cdef2a0bd22d9b51718a4#diff-76276899e039b7f3458a2bd0590d2ec8R27) in the [`igloo`](https://github.com/arcticicestudio/igloo/blob/develop/snowblocks/bash/config/env/igloo#L27#L28) environment configuration file. + +4. **Java package specific environment variable `_JAVA_AWT_WM_NONREPARENTING`** #8 (⊶ ccdf6144) + ↠ The environment variable `_JAVA_AWT_WM_NONREPARENTING` has been placed in the specific [`java`](https://github.com/arcticicestudio/igloo/blob/develop/snowblocks/bash/config/pkg/java) package configuration instead of the main [`igloo`](https://github.com/arcticicestudio/igloo/blob/develop/snowblocks/bash/config/env/igloo#L22) environment configuration file. + +5. **Optimized base dir- and module name detection functions** #9 (⊶ c3e9a792) + ↠ The functions to initialize the `$SNOWBLOCK_BASH_BASE_DIR` environment variable and to get the name of the currently running module were unnecessary complicated, unstable and contained duplicated code. + +6. **Renamed environment `illuvigaq` to `igloo`** #10 (⊶ f0856f32) + ↠ The `illuvigaq` environment has been finally renamed to `igloo`. The env configuration [`illuvigaq`](https://github.com/arcticicestudio/igloo/blob/develop/snowblocks/bash/config/env/illuvigaq) symlinked to [`igloo`](https://github.com/arcticicestudio/igloo/blob/develop/snowblocks/bash/config/env/igloo) is not used anymore. + +7. **`sudo` package configuration** #12 (⊶ d605816d) + ↠ Added a package configuration for [`sudo`](https://www.sudo.ws). The `SUDO_PROMPT` environment variable has been set to highlight the word "sudo" with a light background and a dark front followed by `$USER@$HOSTNAME` colorized with bluish _Nord_ colors. + Also see the following related changes: + + - **Core alias `sudo` for alias expansion** #15 (⊶ dad96f29) + ↠ Added a new `sudo` core alias to fix alias expansion when running a user alias via `sudo`. + _bash_ only checks the first word of a command for an alias, any words after that are not checked. That means in a command like `sudo pacman`, only the first word (`sudo`) is checked by _bash_ for an alias while `pacman` is ignored. This can be changed by adding a space to the end of the alias value so _bash_ checks the next word after the alias. + Snippet of the official [bash manual][bash-docs-alias]: + + > The first word of each simple command, if unquoted, is checked to see if it has an alias. If so, that word is replaced by the text of the alias. + > If the last character of the alias value is _blank_, then the next command word following the alias is also checked for alias expansion + + More information and this alias can also be found in the [Arch Linux Wiki for `sudo`][archw-sudo]. + +8. **Core alias for _Spring Boot Remote Debugging_ via Maven** #13 (⊶ 0aecbe39) + ↠ Added a new `sbrd` core alias to remote debug Spring Boot applications. + **JDK 5** or higher should use the`-agentlib` option instead of `-Xdebug -Xrunjdwp` (Java Debug Wire Protocol): `-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=9999"` + Arguments can be appended via `-Drun.jvmArguments` and commands for Maven to run the Spring Boot Application via `mvn spring-boot:run`: `mvn spring-boot:run -Drun.jvmArguments="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=9999"` + +9. **Auto-detect installed _Ruby_ version for `PATH` concatenation** #17 (⊶ 6b0f8e2b) + ↠ Before all _Ruby_ gem paths (`~/.gem/ruby/*/bin`) for each version had to be added to the `$PATH_RUBY_GEMS` variable in the [`igloo`](https://github.com/arcticicestudio/igloo/blob/develop/snowblocks/bash/config/env/igloo) env config manually. + This has been changed to detect installed versions, add it to an array and append it to the `$PATH_RUBY_GEMS` variable separated with a colon (`:`). + +10. **`gulp` package configuration** #18 (⊶ 6b0f856f) + ↠ Added a package configuration for [gulp](http://gulpjs.com) to enable shell completions [provided by `gulp`][gulp-cli#compl]. + Also see the following related changes: + + - **Removed `gulp` package configuration** #145 (⊶ 83bbc253) + ↠ [Gulp][] was not used anymore and has therefore been replaced with [Webpack][] or by simply using scripts or [npm scripts][npm-docs-scripts]. Therefore the [gulp](https://github.com/arcticicestudio/igloo/blob/c1fdba9e6554a4c1cdff32618ddafd700bc1a4cc/snowblocks/bash/config/pkg/gulp) package configuration has been removed. This also improves the shell startup time since the auto-completion script of `gulp` is not sourced anymore. + +11. **Cleaned up _Java_ package config docs** #19 (⊶ 2696ed05) + ↠ Updated references, remove unnecessary double quotes and cleaned up indentations. + +12. **Removed local Ruby and NPM modules from `PATH`** #52 ⇄ #56 (⊶ 900a6b2e) + ↠ Global _Ruby_- and _NPM_ packages should be installed to the default paths instead of customized paths to increase the overall compatibility and adapt to general conventions. + The `PATH_NPM_PACKAGES` and `PATH_RUBY_GEMS` variables were therefore obsolete and have been removed from `PATH`. + +13. **Add `GRADLE_OPTS`** #86 ⇄ #89 (⊶ bffaf260) + ↠ Created a package configuration for [Gradle][] to set and export global default options using the [`GRADLE_OPTS`][gradle-docs-env#opts] environment variable. It includes + + - `org.gradle.daemon=true` - Enable to always use the Gradle daemon to run builds. + Since Gradle 3.0, the daemon is [enabled by default][gradle-docs-rln-3.0#daemon] and is recommended for running Gradle. + - `org.gradle.console=rich` - Always colorize console output. + +14. **Alias for file/directory mode bits (attributes) in octal notation format** #86 ⇄ #88 (⊶ d20e4d20) + ↠ Added a new `lsm` ("_list modes_") alias for the `stat` command to show [file/directory mode bits (attributes)][wiki-fs_perms] in the octal notation format. + +15. **Using `diff-so-fancy` without _Git_** #61 ⇄ #90 (⊶ 08cbbc4c) + ↠ [diff-so-fancy][] has been designed to work within Git controlled directories. To allow to use it to compare files that are not controlled by Git the `--no-index` option of `git-diff` can be used. + The implemented script pipes the output to `less` using the options + + - `-R, --RAW-CONTROL-CHARS` to only display ANSI "color" escape sequences in "raw" form. + - `-F, --quit-if-one-screen` to automatically exit if the entire file can be displayed on the first screen. + - `-X, --no-init` to disable sending the _termcap_ (de)initialization strings to the terminal to avoid unnecessary operations like clearing the screen. + - `-x2, --tabs=n` to use two tab stops. + Also see [so-fancy/diff-so-fancy#220 (comment)](https://github.com/so-fancy/diff-so-fancy/issues/220#issuecomment-282530252) for more details. + +16. **Removed custom `ATOM_HOME` path** #98 ⇄ #102 (⊶ 78042d83) + ↠ The [`ATOM_HOME` environment variable][atom-docs-custom#home_path_env] was assigned to a custom path for the configuration folder of _Atom_ instead of using the default `~/.atom`. The reason was that the folder was located in a kind of "global application configuration collection folder" on another drive mounted on system start. This has now been deprecated and changed to use the default paths of the installed applications. The `~/.atom` folder is now used for _Atom_ which is located on the main SSD drive instead of using a symlink to the external drive. + This change also comes with a great performance boost as the read/write capacity of the external drive HDD was of course way slower than the SSD. + +17. **Source local `~/.bin` for binaries** #99 ⇄ #103 (⊶ 13d4ec36) + ↠ If a local `~/.bin` folder exists it is now added to `PATH` to make all included binaries (executable scripts) available. + +18. **Shortcut alias for `trash-cli`** #100 ⇄ #104 (⊶ eb5dedb8) + ↠ Added a new `t` shortcut alias for [trash-cli][trash-cli] to quickly move files and folders into the trash. + +19. **Alias for `taskwarrior`** #126 (⊶ 12dc9609) + ↠ Renamed the previously used `t` alias of [trash-cli][trash-cli] to `trm` to use it for [taskwarrior][] instead. + +20. **Alias for `timewarrior`** #127 (⊶ 0cdb1dd2) + ↠ Added new shortcut aliases for [timewarrior][]: + + - `tw` = `tw summary` - Shortcut to show the summary. + - `tws` = `timew :ids` - Shortcut to show IDs by default (depends on `alias.tw`). + +21. **Package configuration and alias for _Buku_** #128 (⊶ 68e0289a) + ↠ [Buku][buku] provides the `BUKU_COLORS` environment variable to allow users to define a custom color scheme. It follows the same principle like the `LSCOLORS` environment variables of the BSD `ls` command. + The five letters represent the colors in ordered form of + + - index + - title + - url + - description/comment/note + - tag + See the GitHub repository wiki page about [how to customize colors][buku-wiki-colors] for more details about available letters and their meaning. + Next to this a shortcut alias `bk` has been added to simplify the command usage. + +22. **Environment and auto-completion for `iceowl` host (macOS support)** #146, #131 (⊶ ac9f7bf7) + ↠ Added a new [environment configuration](https://github.com/arcticicestudio/igloo/tree/83bbc2530dbb21f7e734aaa9e33898d7c4c67d50/snowblocks/bash/config/env) for the new `iceowl` host. Also imported the auto-completion scripts bundled with the Homebrew [git][brew-git] and [bash][brew-bash] forumlas. + +23. **Alias for _IINA_** #147 (⊶ 17158a75) + ↠ Added a new _macOS_ specific `iina` alias for [IINA][] to ensure the [MPV][] specific flags [`--mpv-config-dir`][mpv-doc-config-dir] and `--mpv-watch-later-directory` are always used which contain the paths to the [MPV configuration files][mpv-doc-config-files] and the [_watch-later_ folder][mpv-doc-config-folder-wl] of the [`--save-position-on-quit` feature][mpv-doc-save-pos]. This ensures the _watch-later_ state/position files are always synced with `igloosync` to ensure consitency with other synced hosts like `igloo`. + +24. **Shorthand script to open files, paths or URLs** #169 (⊶ dedfd67b) + ↠ Most OS provide builtin tools to open a file, path or URL with the associated application based on the MIME type. To use a uniform command for it a new script `open` has been implemented. + When running on Linux it'll use the XDG compliant tool `xdg-open` from [xdg-utils][] while it'll pass through the parameters to the builtin application also called `open` when run on macOS. + +25. **Basic _Go_ environment setup** #181 (⊶ ef8c84d4) + ↠ I started to use [Go][] as my main programming language almost 3 years for everything from CLIs, high performant and lightweight backends/microservices with performance and intercompatibility in mind as well as for daily tools. + _Go_ comes with a fantastic toolchain that also doesn't require a lot of necessary setups, therefore this basic setup is enough to work efficiently in combination with the awesome [IntelliJ Go plugin][jb-plg-go], a minimal setup for [Vim with the `govim` plugin][govim] and a basic integration for [Go in VS Code][vscode-docs-go]. + I've used the following basic setup: + - Defined the `GOPATH` environment variable to point to the custom location at `$HOME/.go`. Even though I only use [Go Modules][go-ghwiki-mods] this is required for backwards compatibility, the toolchain as well as the resulting binaries in `$GOPATH/bin` + - Added `$GOPATH/bin` to `$PATH` for all hosts. + +
+ +26. **Mage package configuration** #192 (⊶ 39069bef) + ↠ Added a package configuration for [Mage][], a make/rake-like build tool using Go allowing to write plain-old go functions that'll automatically be used as Makefile-like runnable targets. See the [official documentation about environment variables][mage-docs-env] for more information. + + - `MAGEFILE_CACHE` — Changed the path of the directory for the magefile build cache from the default location `$HOME/.magefile` to `/tmp/.magefiles` since there is no need to persist the cache across system restarts. + +27. **Fixed determing the exit status of last shell command** #207 (⊶ 6f483af3) by [@xulongwu4][gh-user-xulongwu4] + ↠ The exit status of the last shell command was not determined at the very beginning of the `compile_prompt` function which caused a wrong code output. + +### pacman — #14 (⊶ fa6909c8) + +↠ Initially `snwoblocks/pacman` for [pacman][] provided the following files & directories linked to their destination: + +- `makepkg.conf` → `~/.makepkg.conf` +- `pacman.conf.igloo`, `pacman.conf.archbook` → `~/.pacman.conf` + +The initial implementation also included + +- a package configuration for `pacaur` to set the `AURDEST` environment variable. +- the new `STORE_PKGS` environment variable added to the `igloo` and `archbook` environment configurations. +- the shorthand `pacman --config ` shell alias. +- _pacman_ configurations for the hosts `igloo` and `archbook`. + +Over the time the `pacman` _snowblock_ evolved through the following changes: + +1. **Everyone loves candies!** #34 ⇄ #35 (⊶ be4d52e0) + ↠ Enabled [pacman][]'s _candy eating mode_ for progress bars via `ILoveCandy` config boolean. See [`conf.c`](https://git.archlinux.org/pacman.git/tree/src/pacman/conf.c#n483) in _pacman_'s source code for more details. + +2. **Replaced/Updated `archbook` with new `iceowl` host** #143, #131 (⊶ c08ca24c) + ↠ There were [various _snowblock_/_snowflake_ configurations that contained the `archbook` host](https://github.com/search?l=&q=archbook+repo%3Aarcticicestudio%2Figloo+created%3A%3E2018-09-18&type=Code) which doesn't exist anymore and has been replaced in most cases with the new `iceowl` host. In cases where the _snowblock_/_snowflake_ is only targeted for Linux the `archbook` host has been removed to make it independent from the host. They can be updated when a new Linux host might be introduced. + +
+ +3. **Removed ignored pacman packages** #49 ⇄ #53 (⊶ b853ec8c) + ↠ Before the `harfbuzz`, `harfbuzz-icu` and `gdk-pixbuf2` packages were added to the _pacman_ ignore list to [fix the harfbuzz + _Infinality_ issue](https://gist.github.com/cryzed/e002e7057435f02cc7894b9e748c5671) which caused broken font rendering & boot failures on most systems due to incompatibility with the updated `freetype2` package, which superseded the `infinality-bundle`. + These packages have now been removed from the ignore list against since the issues have already been fixed some days after the issue occurred. + Also see the following related changes: + - **Removed ignored pacman packages for `archbook` host** #53 (⊶ 880b3fac) + ↠ #53 only removed the ignored packages for the `igloo` host which has now also been ported for `archbook`. + +### systemd — #58 (⊶ ab4513b0) + +↠ Initially `snwoblocks/systemd` for [systemd][] provided user [service][freedesktop-systemd-srv] and [units][freedesktop-systemd-unit] to + +- automount the `sync` [gocryptfs][] volume located in the [Dropbox][] folder receiving the password stored in the [GNOME keyring][archw-gnome-keyring] via `secret-tool` ([`libsecret`][libsec]). The service unit is named `igloosync-dropbox`. +- automatically run a instance of the [`ssh-agent`][archw-ssh_ag] using `$SSH_AUTH_SOCK` and let _systemd_ manage the `$SSH_AGENT_PID` environment variable. + +This includes a documentation to describe the requirements for the `igloosync-dropbox.service` file providing information + +- about how to create the required `gocryptfs` password stored- and received via `secret-tool`. +- about how to configure [wiki-fuse][] ([libfuse][]) with the `/etc/fuse.conf` file to allow non-root users to specify the `allow_other` or `allow_root` mount options which overrides the security measure restricting file access to the filesystem owner, so that all users (including root) can access the files. This is necessary to access the files of the mounted `gocryptfs` volume with applications that are run via `sudo`. It is used in the `pacman` _snowblock_ for the local package repository to prevent a _Permission Denied_ exception when running `pacman` (e.g. `sudo pacman -Sy`) if the `gocryptfs` volume is not mounted with the `-allow_other` option. Please note that `libfuse` has a **[unresolved security bug][libfuse/libfuse#15]** when using the `allow_other` mount option as [described in the official documentation][libfuse-sec], but is of **little concern if the filesystem is accessible only to the mounting user** which is the case since these are **dotfiles for a personal system**: + +> No other user (including root) can access the contents of the mounted filesystem (though this can be relaxed by allowing the use of the `allow_other` and `allow_root` mount options in `/etc/fuse.conf`) +> +> If you intend to use the allow_other mount options, be aware that FUSE has an unresolved [security bug][libfuse/libfuse#15]: if the `default_permissions` mount option is not used, the results of the first permission check performed by the file system for a directory entry will be re-used for subsequent accesses as long as the inode of the accessed entry is present in the kernel cache - even if the permissions have since changed, and even if the subsequent access is made by a different user. This is of little concern if the filesystem is accessible only to the mounting user (which has full access to the filesystem anyway), but becomes a security issue when other users are allowed to access the filesystem (since they can exploit this to perform operations on the filesystem that they do not actually have permissions for). +> +> This bug needs to be fixed in the Linux kernel and has been known since 2006 but unfortunately no fix has been applied yet. If you depend on correct permission handling for FUSE file systems, the only workaround is to use `default_permissions` (which does not currently support ACLs), or to completely disable caching of directory entry attributes. + +The target paths `~/.config/systemd/user` for all unit files will be created by _snowsaw_ if they doesn't exist yet. + +The `igloosync-dropbox.service` unit file is only linked for the `igloo` and `archbook` hosts while the `ssh-agent.service` file will be linked by default. + +Over the time the `system` _snowblock_ evolved through the following changes: + +1. **Replaced/Updated `archbook` with new `iceowl` host** #143, #131 (⊶ c08ca24c) + ↠ There were [various _snowblock_/_snowflake_ configurations that contained the `archbook` host](https://github.com/search?l=&q=archbook+repo%3Aarcticicestudio%2Figloo+created%3A%3E2018-09-18&type=Code) which doesn't exist anymore and has been replaced in most cases with the new `iceowl` host. In cases where the _snowblock_/_snowflake_ is only targeted for Linux the `archbook` host has been removed to make it independent from the host. They can be updated when a new Linux host might be introduced. + +### XDG — #74 ⇄ #78 (⊶ 89b68775) + +↠ Initially `snwoblocks/xdg` for _XDG_/[freedesktop.org][] specifications provided the following files & directories linked to their destination: + +- `user-dirs.conf` → `~/.config/user-dirs.conf` +- `user-dirs.dirs` → `~/.config/user-dirs.dirs` +- `user-dirs.locale` → `~/.config/user-dirs.locale` +- `bookmarks` → `~/.config/gtk-3.0/bookmarks` +- `applications/atom.desktop` → `~/.local/share/applications/atom.desktop` +- `applications/evolution.desktop` → `~/.local/share/applications/evolution.desktop` +- `applications/gpick.desktop` → `~/.local/share/applications/gpick.desktop` +- `applications/gtkhash.desktop` → `~/.local/share/applications/gtkhash.desktop` +- `applications/intellij-idea-ce.desktop` → `~/.local/share/applications/intellij-idea-ce.desktop` +- `applications/intellij-idea-u.desktop` → `~/.local/share/applications/intellij-idea-u.desktop` +- `applications/minecraft.desktop` → `~/.local/share/applications/minecraft.desktop` +- `applications/org.gnome.gedit.desktop` → `~/.local/share/applications/org.gnome.gedit.desktop` +- `applications/org.gnome.Nautilus.desktop` → `~/.local/share/applications/org.gnome.Nautilus.desktop` +- `applications/org.gnome.Screenshot.desktop` → `~/.local/share/applications/org.gnome.Screenshot.desktop` +- `applications/pycharm-community.desktop` → `~/.local/share/applications/pycharm-community.desktop` +- `applications/shotwell-viewer.desktop` → `~/.local/share/applications/shotwell-viewer.desktop` +- `applications/webstorm.desktop` → `~/.local/share/applications/webstorm.desktop` +- `autostart/dropbox.desktop` → `~/.local/share/autostart/dropbox.desktop` +- `autostart/plank.desktop` → `~/.local/share/autostart/plank.desktop` +- `settings.ini` → `~/.config/gtk-3.0/settings.ini` + +This includes [freedesktop][]'s _xdg_ specifications for + +- user-specific [`.desktop` application files][archw-dfile]. +- user-specific [autostart `.desktop` files][freedesktop-autostart]. +- [XDG user directories][archw-ud] configurations and document templates. +- [XDG bookmarks][fd-bookmarks] + +Over the time the `xdg` _snowblock_ evolved through the following changes: + +1. **Removed GNOME Nautilus `.desktop` file** #105 (⊶ 7125312e) + ↠ The custom `org.gnome.Nautilus.desktop` file isn't necessary anymore since the the missing MIME type handler has been added in the upstream which is necessary to open Nautilus from within other applications to e.g. show a project folder in the file system. + +
+ +2. **Updated and removed obsolete application desktop files** #118 (⊶ f2dffb76) + ↠ Some XDG application `.desktop` files were not required anymore because the latest upstream versions have been adapted and improved to match the custom configurations: + + - [JetBrains IntelliJ IDEA Ultimate Edition][arch-jb-idea-u] binary `/opt/intellij-idea-ultimate-edition/bin/idea.sh` is now linked to `/usr/bin/idea` and `/usr/bin/intellij-idea-ultimate-edition`. The desktop file is now uniformly named `/usr/share/applications/jetbrains-idea.desktop`. + - [JetBrains IntelliJ IDEA Community Edition][arch-jb-idea-ce] binary `/opt/intellij-idea-community-edition/bin/idea.sh` is now linked to `/usr/bin/idea`. The desktop file is now named uniform `/usr/share/applications/jetbrains-idea.desktop`. + - [JetBrains Webstorm][aur-jb-ws] binary `/opt/webstorm/bin/webstorm.sh` is now linked to `/usr/bin/webstorm` and the desktop file is now named uniform `/usr/share/applications/jetbrains-webstorm.desktop`. + - [JetBrains Pycharm Community Edition][arch-jb-py-ce] binary `/opt/pycharm-community-edition/bin/pycharm.sh` is now linked to `/usr/bin/pycharm`, but the desktop file is still named `/usr/share/applications/pycharm.desktop`. + - [Atom 1.28][atom-blog-1.28] included an upgrade to Electron 2.0 and now ships with an standalone launcher(`/usr/lib/atom/atom`) instead of using the Electron binary (`electron `). + +3. **Custom _JetBrains IntelliJ IDEA Ultimate_ editor desktop launcher** #203 (⊶ d4f474eb) + ↠ _IntelliJ IDEA_ version 2019.1.3 came with a new “hardcoded“ icon so the `.desktop` launcher required a customization to use the correct icon theme name. + +4. **Custom _KeePassXC_ desktop launcher** #204 (⊶ 6d86a967) + ↠ [KeePassXC][] supports GTK3 out-of-the-box, but unfortunately doesn't adapted to the current system theme and icon them making the UI looking really unpleasant and outdated. + To use a modern style the app now starts with the [`QT_QPA_PLATFORMTHEME` environment variable set to `gtk2`][archw-qt#fail_update] to [ensure the app respects the Qt5 style overrides][keepassxreboot/keepassxc#1931]. + +5. **Replaced/Updated `archbook` with new `iceowl` host** #143, #131 (⊶ c08ca24c) + ↠ There were [various _snowblock_/_snowflake_ configurations that contained the `archbook` host](https://github.com/search?l=&q=archbook+repo%3Aarcticicestudio%2Figloo+created%3A%3E2018-09-18&type=Code) which doesn't exist anymore and has been replaced in most cases with the new `iceowl` host. In cases where the _snowblock_/_snowflake_ is only targeted for Linux the `archbook` host has been removed to make it independent from the host. They can be updated when a new Linux host might be introduced. + +### cower — #65 ⇄ #79 (⊶ 503561de) + +↠ Initially `snwoblocks/cower` for _cower_ (rewritten as [auracle][]) provided the following files & directories linked to their destination: + +- `config` → `~/.config/cower/config` + +### htop — #68 ⇄ #80 (⊶ 952d502b) + +↠ Initially `snwoblocks/htop` for [htop][] provided the following files & directories linked to their destination: + +- `htoprc` → `~/.config/htop/htoprc` + +### plank — #81 ⇄ #82 (⊶ 97e2182b) + +↠ Initially `snwoblocks/plank` for [plank][archw-plank] provided the following files & directories linked to their destination: + +- `igloo/launchers` → `~/.config/plank/igloo/launchers` +- `archbook/launchers` → `~/.config/plank/archbook/launchers` +- `themes` → `~/.config/plank/themes/igloo` + +This includes application launchers for the host specific `igloo` and `archbook` profiles and a minimal, non-obstructive theme called `igloo` with a transparent background and no shadow- and glow effects. + +Over the time the `plank` _snowblock_ evolved through the following changes: + +1. **Removed GNOME Nautilus `.desktop` file** #118 (⊶ 7125312e) + ↠ See the changelog section of _XDG_ for more details. + +2. **Custom _JetBrains IntelliJ IDEA Ultimate_ editor desktop launcher** #203 (⊶ d4f474eb) + ↠ See the changelog section of _XDG_ for more details. + +3. **Removed _Google Chrome_ from desktop app launcher** #205 (⊶ 1c969ff9) + ↠ Since the re-switch to Firefox in #139, _Google Chrome_ is only used for compatibility tests for projects like web apps and websites (_React_, _Gatsby.js_ etc.) as well as private session when using web apps especially build for Google Chrome's APIs/web capabilities. + +4. **Replaced/Updated `archbook` with new `iceowl` host** #143, #131 (⊶ c08ca24c) + ↠ There were [various _snowblock_/_snowflake_ configurations that contained the `archbook` host](https://github.com/search?l=&q=archbook+repo%3Aarcticicestudio%2Figloo+created%3A%3E2018-09-18&type=Code) which doesn't exist anymore and has been replaced in most cases with the new `iceowl` host. In cases where the _snowblock_/_snowflake_ is only targeted for Linux the `archbook` host has been removed to make it independent from the host. They can be updated when a new Linux host might be introduced. + +### tilix — #70 ⇄ #83 (⊶ 5c12e6cd) + +↠ Initially `snwoblocks/tilix` for [Tilix][] provided the following files & directories linked to their destination: + +- `bookmarks.json.igloocrypt` → `~/.config/tilix/bookmarks.json` + +Also includes a [dconf][] dump of the current system configurations. See [gnunn1/tilix#571][gnunn1/tilix#571] for more details. + +Over the time the `tilix` _snowblock_ evolved through the following changes: + +1. **Updated and extended bookmarks** #119 (⊶ 962bc284) + ↠ Updated some paths of bookmarks that were not up-to-date and added some that were missing. + +2. **Replaced/Updated `archbook` with new `iceowl` host** #143, #131 (⊶ c08ca24c) + ↠ There were [various _snowblock_/_snowflake_ configurations that contained the `archbook` host](https://github.com/search?l=&q=archbook+repo%3Aarcticicestudio%2Figloo+created%3A%3E2018-09-18&type=Code) which doesn't exist anymore and has been replaced in most cases with the new `iceowl` host. In cases where the _snowblock_/_snowflake_ is only targeted for Linux the `archbook` host has been removed to make it independent from the host. They can be updated when a new Linux host might be introduced. + +### tmux — #66 ⇄ #92 (⊶ 56595bde) + +↠ Initially `snwoblocks/tmux` for [tmux][] provided the following files & directories linked to their destination: + +- `tmux.conf` → `~/.tmux.conf` + +If the _tmux_ plugin manager [tpm][] doesn't exist it will be [downloaded automatically][tmux-docs-autodown]. +Also see the [“tmux“ Arch Linux Wiki page][archw-tmux] for more details. + +### NPM — #95 ⇄ #96 (⊶ a916aa17) + +↠ Initially `snwoblocks/npm` for [NPM][] provided the following files & directories including + +- the [`.npmrc` configuration file][npm-docs-rc] to define the [`npm init`][npm-docs-config] options + - `init-author-name` + - `init-author-email` + - `init-author-url` + - `init-version` + - `init-license` +- the `package-lock` option with `false` to disable the generation of the [`package-lock.json`][npm-docs-pkg-lock] file. +- the `save-exact` option to always save the exact dependency versions in the [`package.json`][npm-docs-pkg]. + +Over the time the `npm` _snowblock_ evolved through the following changes: + +1. **Enable NPM's package-lock feature** #142 (⊶ 22635a83) + ↠ The [`package-lock.json`][npm-docs-pkg-lock] file was disabled in the global [`npmrc`][npm-docs-rc] file since it hasn't been used due to a various problems regarding merge conflicts and unintended transitive dependency updates on each `npm install`. These problems have been fixed in later NPM release versions. This allows to use this feature again to ensure stable and reproducible builds. + +2. **Replaced/Updated `archbook` with new `iceowl` host** #143, #131 (⊶ c08ca24c) + ↠ There were [various _snowblock_/_snowflake_ configurations that contained the `archbook` host](https://github.com/search?l=&q=archbook+repo%3Aarcticicestudio%2Figloo+created%3A%3E2018-09-18&type=Code) which doesn't exist anymore and has been replaced in most cases with the new `iceowl` host. In cases where the _snowblock_/_snowflake_ is only targeted for Linux the `archbook` host has been removed to make it independent from the host. They can be updated when a new Linux host might be introduced. + +### atom — #106 (⊶ 528383c5) + +↠ Initially `snwoblocks/atom` for [Atom][] provided the following files & directories linked to their destination: + +- `config.cson` → `~/.atom/config.cson` +- `keymap.cson` → `~/.atom/keymap.cson` +- `project-folder.cson` → `~/.atom/project-folder.cson` +- `packages.cson` → `~/.atom/packages.cson` + +This includes + +- the main [CSON based condifuration][atom-docs-custom#cson_conf] file +- the [keymapping configuration][atom-docs-keymap] file + +Support for the [package-sync][atom-pkg-package-sync] package is provided through the `packages.cson` file including all installed packages. The `project-folder.cson` configuration file for the [project-folder][atom-pkg-project-folder] package contains all necessary group entries. + +Over the time the `atom` _snowblock_ evolved through the following changes: + +1. **Color Profile** #115 (⊶ dc4d22d6) + ↠ Atom 1.28 introduced [support for custom ICC color profiles][atom-blog-rln-1.28#color_profile] based on the upgrade to Electron 2.x which in turn is based on the latest Chrome version. This version includes changes to the color rendering and now respects the color profile configured in the OS settings. + Due to this change for many users the [colors appear to be pale][atom/atom#17356]. To bring back the previous (more stronger) color rendering Atoms _Core_ → „Color Profile“ has been changed from „Use color profile configured in the operating system“ to „Use sRGB color profile“. + +
With OS color profile
+
With sRGB color profile
+ +
+ +2. **Rust support: `language-rust` package** #121 (⊶ 11ca4319) + ↠ Added support for [Rust][] via the [language-rust][atom-pkg-language-rust] community package. + +3. **New project paths** #122 (⊶ bb196345) + ↠ Added groups for the new project paths: + + - **communikey**: `~/code/github/repositories/communicode/*` + - **NPM**: `~/yggdrasil/npm/*` + - **snowsaw**: `~/yggdrasil/snowsaw` + +4. **Include default package configuration keys** #124 (⊶ 7554efce) + ↠ Before the configuration keys were initialized with the default value were not added to user's `~/.atom/config.cson`. To ensure the same Atom setup even when some default values are changed these have been included in the `config.cson`. This also includes keys for all core and community packages. + +5. **Atom IDE** #151 ⇄ #158 (⊶ 39707355) + ↠ Added the [Atom IDE][atom-ide] base package [atom-ide-ui][atom-pkg-atom-ide-ui] and the [ide-typescript][atom-pkg-ide-typescript] package for JavaScript (Babel, ES6, React etc.) and Typescript. + +6. **Atom IDE - Don't show debugger when setting breakpoints** #166 (⊶ 360f7140) + ↠ By default, when [setting a breakpoint][nuclide-docs-bp] the [debugger][nuclide-docs-db] was shown automatically. Sometimes this was not the desired goal (e.g. by accidentally setting a breakpoint) and has been disabled. + +7. **Keymap to move caret to the end/start of the current line** #167 (⊶ 360fb8b1) + ↠ To simply move the caret to the end/start of the current line instead of using the end and pos keys a new mapping has been added for Linux based OS: + - **Move to the end of the current line**: Ctrl (super) + alt + + - **Move to the start of the current line**: Ctrl (super) + alt + + The default mappings + + / for macOS are already provided by default. + +### taskwarrior — #107 (⊶ c6534e63) + +↠ Initially `snwoblocks/taskwarrior` for [Taskwarrior][] provided the following files & directories linked to their destination: + +- `taskrc` → `~/.taskrc` +- `nord.theme` → `~/.task/nord.theme` + +This includes the _key=value_ based [`.taskrc` configuration][taskwarrior-docs-conf] file and a [Nord][] based color theme to be included in `.taskrc`. + +- **Context** — The [context][taskwarrior-docs-cx] feature is used to separate all public projects and private/job related tasks. +- **UDA (User Defined Attributes)** — The [UDA][taskwarrior-docs-uda] feature is used to create custom attributes to add a assignee, a estimation value and the GitHub issue ID to a task. +- **Reports** — The [reports][taskwarrior-docs-r] feature is used to extend and optimize the task output. The custom report should be set to `default.command` to replace the default `next` report. +- **Aliases** — The config contains aliases to align with the alias workflow of other _snowblocks_ like _bash_ and _Git_. This improves the usability, because there are several commands that start with the same characters making it slower to be used with the auto completion: + - `a` :arrow_right: `add` + - `bd` :arrow_right: `burndown.daily` + - `cx` :arrow_right: `context` + - `e` :arrow_right: `edit` + - `ls` :arrow_right: `list` + - `mod` :arrow_right: `modify` +- **Alternative workflows** — The _Taskwarrior_ workflow is changed later on to use multiple databases per use-case like e.g. one database per project to make better use of the features like _projects_, _tags_ and _context_ with finer grained filters. + +Over the time the `taskwarrior` _snowblock_ evolved through the following changes: + +1. **Time tracking hooks** #108 (⊶ 2e541f5e) + ↠ Created two hooks to track the duration a task was active. Both hooks are written in Python 3 and require a Taskwarrior version `>=2.4`. + + - **With `totalactivetime` UDA** — The first hook makes use of a new UDA called `totalactivetime` of type `duration` which stores the total time in seconds. Every time a task gets stopped the value gets added to the old value. To simplify the communication with the [Taskwarrior Hook v2 API][taskwarrior-docs-hooks2] the hook uses the [taskw][pypi-taskw] Python package which provides the bindings for Python. + **Note: This requires [taskw][pypi-taskw] as a direct dependency and must be installed on the target system!** The package is [available from the AUR][aur-python-taskw]. + - **Taskwarrior integration** — The second hook is a fork from the [official Taskwarrior `on-modify.taskwarrior` hook][timewarrior-hook-on-modify]. It comes bundled with _Taskwarrior_, but can not be used via symlink, because the file is owned by the `root` user which prevents the script from being executed when symlinked. + The usage of the hook is also [documented in the official Timewarrior docs][taskwarrior-docs-tw_int]. + +2. **taskopen integration** #110 (⊶ 759fdc69) + ↠ Integrated [taskopen][] by adding the main [`.taskopenrc` configuration][taskopen#conf] file and aliases to simply adding notes (`an`) and open (`o`) task notes/annotations. + +3. **More than one active task** #117 (⊶ 8d013adc) + ↠ The default _Taskwarrior_ limit of active tasks is one. However, there are many use cases where multiple active tasks must be used, e.g. when working on an GitHub issue and the associated PR which are both handled in separate tasks or when working on tasks that are dependent on other tasks. + The limited has therefore been increased to allow to use _Taskwarrior_ for such use cases without having to deal with limitation errors. + +4. **taskopen workaround support for macOS** #134,#131,#110 (⊶ 47af7adc) + ↠ The management of installed [Perl modules][cpan-doc-modules] on macOS is not as simple and well thought through like the concept of package managers on Linux systems, e.g. via [pacman][] on [Arch Linux][archlinux]. There are problems when is comes to configuring the runtime path the modules have been installed to even when using the most popular module manager called [cpanminus][]. This causes the [Taskwarrior][] plugin [taskopen][] fail to load because the Perl core module `JSON` can't be found and loaded. + As a workaround a custom script has been implemented to create and open a attached note of an task: + + 1. Use the [`_get`][taskwarrior-doc-api-_get] function of the [Taskwarrior DOM API][taskwarrior-doc-dom-api] to extract any stored piece of information of an task. This allows to receive the [UUID of an task][taskwarrior-doc-ids]. + 2. Create a custom `on` (open note) [Taskwarrior alias][taskwarrior-doc-alias] to run the implemented custom script via the `execute` command. + + The logic of the script follows the same like taskopen uses for default notes: + + - Use the [UUID of an task][taskwarrior-doc-ids] as the note filename. + - Simply pass the file to an editor (in this case [Atom][]) which will… + - …create a new file if it doesn't exist yet. + - …open the file if it already exists. + + Note that **this script is not limited to macOS** but can also be used for any other Linux host! It is only necessary to use it on macOS due to the problems described above. + +5. **Link whole Taskwarrior "hooks" and "scripts" folders** #201 (⊶ 961293ba) + ↠ Instead of linking single files from the `hooks` and `scripts` Taskwarrior folders both folders are now linked directly. + +6. **Use single VS Code instance to open task notes** #202 (⊶ e9c04c6f) + ↠ When opening a task note, it is now made sure to add it to the already opened VS Code instance instead of opening a new one by using VS Code's `reuse-window` CLI flag. + +7. **Replaced/Updated `archbook` with new `iceowl` host** #143, #131 (⊶ c08ca24c) + ↠ There were [various _snowblock_/_snowflake_ configurations that contained the `archbook` host](https://github.com/search?l=&q=archbook+repo%3Aarcticicestudio%2Figloo+created%3A%3E2018-09-18&type=Code) which doesn't exist anymore and has been replaced in most cases with the new `iceowl` host. In cases where the _snowblock_/_snowflake_ is only targeted for Linux the `archbook` host has been removed to make it independent from the host. They can be updated when a new Linux host might be introduced. + +### timewarrior — #109 (⊶ 15688f30) + +↠ Initially `snwoblocks/timewarrior` for [Timewarrior][] provided the following files & directories linked to their destination: + +- `timewarrior.cfg.archbook`, `timewarrior.cfg.igloo` → `~/.timewarrior/timewarrior.cfg` +- `nord.theme` → `~/.timewarrior/nord.theme` + +This includes the [`timewarrior.cfg` configuration][timewarrior-docs-conf] files for the `igloo` and `archbook` hosts as well as a [Nord][] based [color theme][timewarrior-docs-themes] that is imported imported in the `timewarrior.cfg` file. +The default `day` reports should include the month name and week number. + +Over the time the `timewarrior` _snowblock_ evolved through the following changes: + +1. **Timewarrior config for iceowl (macOS support)** #144,#131 (⊶ c1fdba9e) + ↠ Created a new configuration for the new `iceowl` host due to the usage of absolute paths in the configuration previous files of [Timewarrior][]. This requires a configuration per host, e.g. for different paths to the used color theme. + +2. **Replaced/Updated `archbook` with new `iceowl` host** #143, #131 (⊶ c08ca24c) + ↠ There were [various _snowblock_/_snowflake_ configurations that contained the `archbook` host](https://github.com/search?l=&q=archbook+repo%3Aarcticicestudio%2Figloo+created%3A%3E2018-09-18&type=Code) which doesn't exist anymore and has been replaced in most cases with the new `iceowl` host. In cases where the _snowblock_/_snowflake_ is only targeted for Linux the `archbook` host has been removed to make it independent from the host. They can be updated when a new Linux host might be introduced. + +### GPG — #130 (⊶ 1f3815e7) + +↠ Initially `snwoblocks/gpg` for [GPG][] provided the following files & directories linked to their destination: + +- `gpg.conf` → `~/.gnupg/gpg.conf` + +This includes the [`gpg.conf`][gpg-doc-conf] configuration file and the [`gpg-agent.conf`][gpg-doc-conf-agent] file for the _gpg-agent_. + +### launchd — #133, #131, #58 (⊶ 6cf24792) + +↠ Initially `snwoblocks/launchd` for [launchd][] ([FreeBSD Wiki][freebsd-wiki-launchd]) provided the following files & directories linked to their destination: + +- `com/arcticicestudio/igloo/launchd/igloosync/com.arcticicestudio.igloo.launchd.igloosync-dropbox.plist` → `~/Library/LaunchAgents/com.arcticicestudio.igloo.launchd.igloosync-dropbox.plist` +- `com/arcticicestudio/igloo/launchd/igloosync/igloosync-dropbox.sh` → `~/Library/LaunchAgents/igloosync-dropbox.sh` + +This includes a user agent defining a job to auto-mount the `sync` [gocryptfs][] volume located in the [Dropbox][] folder receiving the password stored in the [macOS Keychain][apple-docs-keychain] via the macOS builtin system CLI tool `security`. +The documentation describes the requirements for the `com.arcticicestudio.igloo.launchd.igloosync` agent. It contains information about dependencies and how to create the required `gocryptfs` password stored- and received via the macOS builtin system CLI tool `security`. + +Note that this is a _macOS_ specific _snowblock_ and therefore the `com.arcticicestudio.igloo.launchd.igloosync-dropbox.plist` agent file is only linked for the currently only _macOS_ host `iceowl`. + +See the knowledge base at [launchd.info][] for more details as well as the available _man_ pages `launchd(1)`, `launchd.plist(5)` and `security(1)`. + +### Docker — #136, #131 (⊶ 0876c2c9) + +↠ Initially `snwoblocks/docker` for [Docker][] provided the following files & directories linked to their destination: + +- `config.iceowl.json` → `~/.docker/config.json` + +This includes `config-.json` configuration files where `` is the name of the target host. The `iceowl` host has the `credsStore` field with the `osxkeychain` value to ensure the _macOS Keychain_ is used to store tokens instead of saving them as plain text into the config file. + +### pip — #141, #131 (⊶ f5d6ff48) + +↠ Initially `snwoblocks/pip` for [pip][] provided the following files & directories linked to their destination: + +- `pip.conf` → `~/.config/pip/pip.conf` +- `requirements.iceowl.txt` → `~/.config/pip/requirements.txt` + +This includes the [`requirements.txt`][pip-docs-requirements] file to track [installed packages][python-docs-install-reqs] and their versions and the [`pip.conf`][pip-docs-config-file] file for user specific configurations. +See the documentation about the [requirements.txt file format][pip-docs-req-file-format] for more details. + +### Firefox — #139 (⊶ 505e3407) + +↠ Initially `snwoblocks/firefox` for [Firefox][] and [Firefox Developer Edition][firefox-dev-edition] provided the following files & directories linked to their destination: + +- `chrome` → `~/.mozilla/firefox/igloo/chrome`, `~/Library/Application Support/Firefox/Profiles/igloo/chrome` +- `containers.json` → `~/.mozilla/firefox/igloo/containers.json`, `~/Library/Application Support/Firefox/Profiles/igloo/containers.json` +- `ignore-dev-edition-profile` → `~/.mozilla/firefox/ignore-dev-edition-profile`, `~/Library/Application Support/Firefox/ignore-dev-edition-profile` +- `profiles.iceowl.ini` → `~/Library/Application Support/Firefox/profiles.ini` +- `profiles.igloo.ini` → `~/.mozilla/firefox/profiles.ini` +- `user.js` → `~/.mozilla/firefox/igloo/user.js`, `~/Library/Application Support/Firefox/igloo/user.js` + +This includes… + +- …the [`user.js`][mozkb-user.js] file to define and persist almost all preferences for a profile. +- …the [`profiles.ini`][mozkb-profiles.ini] file to configure the name and path of the main profile `igloo`. +- …the `ignore-dev-edition-profile` file to fix [Bugzilla bug 1098986][bugzilla-1098986] that causes Firefox Developer Edition to use the internal default profile regardless of whether another customized profile has been set as default. The problem can be fixed by creating the file within the Firefox application data folder. + +- …the `chrome` folder with the [`userChrome.css`][mozkb-userchrome.css] and [`userContent.css`][mozkb-usercontent.css] files to change the Firefox's UI components design and elements within the content. +- …the `containers.json` file of the [Firefox Multi-Account Containers][firefox-addon-multi-acc-cont] to persist the configured containers. +- …the documentation about the setup, tips & tricks and various configurations. + +See [pyllyukko/user.js][pyllyukko/user.js] for another _Firefox_ `user.js` configuration file designed to harden browser settings and make it more secure as well as [ghacks-user.js][] which is an ongoing comprehensive `user.js` template for configuring and hardening Firefox privacy, security and anti-fingerprinting. + +Over the time the `firefox` _snowblock_ evolved through the following changes: + +1. **Disable third-party APIs for more privacy** #153 ⇄ #160 (⊶ e622889b) + ↠ To improve the privacy some more third-party APIs have been disabled: + + - Set `browser.aboutHomeSnippets.updateUrl` to `""` — Disables third-party API requests on new tab page for snippets widget. + - Set `browser.newtabpage.directory.source` to `""` — Also improves the privacy by removing requests against third-party APIs. + +2. **Fixed tabs not rendered in titlebar** #154 ⇄ #161 (⊶ 9c6a97d1) + ↠ The `browser.tabs.drawInTitlebar` key is set to `false` which caused the tabs to being rendered in the titlebar. + +3. **Disabled fullscreen warning popup** #155 ⇄ #162 (⊶ 924d4953) + ↠ The fullscreen warning popup has been disabled by setting the `full-screen-api.warning.timeout` key to `0`. + +4. **Disabled fullscreen warning popup** #156 ⇄ #163 (⊶ c7c1f898) + ↠ Moved the badge of the [test pilot][firefox-testpilot-exp-color] addon [Firefox Color][firefox-color] into the overflow menu. + +5. **Disabled “Find As You Type“** #164 (⊶ e82e8821) + ↠ The [“Find As You Type“][mozkb-accesb-typeaheadfind] feature (UI path: _Preferences_ → _General_ → _Browsing_ → _Search for text when you start typing_) has been disabled. It allows to search the current site as soon as a key is pressed instead of requiring to press Ctrl/ + f. This is a great accessibility improvement, but unfortunately this often collides with page features like hotkeys e.g. when pressing r on [Octobox][] to sync the latest notifications or any other site using such features. + +6. **Always open bookmarks in a new tab in the background** #165 (⊶ 6826f9cb) + ↠ By default, opening a bookmark from the sidebar uses the current active tab. The `browser.tabs.loadBookmarksInTabs` has been set to `true` to always open bookmarks in a new tab in the background. + +7. **Fixed invalid path for Firefox `user.js` file on macOS** #175 (⊶ eb222438) + ↠ The path for the custom Firefox [`user.js` file][mozkb-user.js] file was invalid for macOS hosts. It did not contain the `Profiles` directory causing a symlink to a path where the file won't be read by _Firefox_. + +8. **“light“ as default UI theme** #224 (⊶ a02a48a1) + ↠ The builtin “light“ UI theme is now used by default with the “normal“ density. The theme is provided by the bundled `firefox-compact-light@mozilla.org` extension. + +9. **Disable automatic crash report sending** #217 ⇄ #229 (⊶ 82bee46a) + ↠ To improve the privacy and security the automatic sending of crash reports has been disabled by setting `browser.tabs.crashReporting.sendReport` to `false`. + +10. **"Standard" option for "Enhanced Tracking Protection" browser privacy preferences** #218 ⇄ #230 (⊶ 379c9659) + ↠ The _Standard_ option for the [Enhanced Tracking Protection][mozs-enhc_track_protc] (stats are available at `about:protections`) preference comes with good defaults configuration and is therefore used instead of the _Custom_ option to also prevent sites from breaking due to cookie blocking. + +11. **“Simple Tab Groups“ add-on** #219 ⇄ #231 (⊶ b279caa1) + ↠ The [Simple Tab Groups][firefox-addon-stg] add-on allows to „create, modify, and quickly change tab groups” and is a port of one of the best Firefox extensions that were available before _Firefox Quantum_. + To adapt it the add-on icon has been added to the top bar for quick access and the add-on preferences adjusted. + +12. **Enabled more `about:debugging` options by default** #220 ⇄ #232 (⊶ 3f92ab9f) + ↠ The [`about:debugging` page][mdm-about-debugging] allows to debug processes, tabs and local add-ons. These options are disabled by default and has therefore been enabled in order to extend the ways to debug features. + +13. **Automatic page reload for touch simulation in responsive design mode** #222 ⇄ #234 (⊶ 95655f18) + ↠ When using the [Responsive Design Mode][mdn-tools-resp_design_mode] and the _touch simulation_ gets activated it requires the page to reload in order to work properly. Firefox provides an option to automatically run this task and has now been enabled by default. + +14. **Disable automatic execution pause on script exceptions** #221 ⇄ #233 (⊶ 7e0d3175) + ↠ When the _DevTools_ are opened and an exceptions occurs in any running script, the debugger will be opened and the execution paused. This is kind of annoying for third-party scripts or when the actual goal is not to debug scripts at all and has therefore been disabled. + +15. **Show CSS grid line numbers** #223 ⇄ #235 (⊶ 25e05122) + ↠ To allow to better design and debug [CSS grids][css-tricks-grid_guide] the Firefox _DevTools_ can [visually show the grid line numbers][mdm-inspect-grid#line_num]. This option is disabled by default and has therefore been enabled. + +16. **“Inter“ as base sans-serif typeface** #225 ⇄ #236 (⊶ 8ea0ef06) + ↠ It is currently [required to manually configure the sans-serif typeface based on the running OS](https://github.com/arcticicestudio/igloo/tree/eb222438e6cd93b19c222043570bb7c627ea3e3b/snowblocks/firefox#typeface) due to licensing and the availability of specific font families on different operating systems. Since I use the fantastic [Inter][] typeface family for almost all UI, text and designs it has now also been set as default sans-serif typeface. Inter is open source and therefore system independent and is installed in all of my systems/habitats. + +17. **“Soft“ and USB WebAuthn development options** #226 ⇄ #237 (⊶ 87e6b1d0) + ↠ In order to allow and simplify the development and testing of [WebAuthn][] based apps and websites, the security [options must be set to allow “soft tokens“][webauthn.bin.coffee-ff58]. + Also see the section about [requirements for testing][mozw-sec-webauthn#test_req] of the Mozilla “Security/QA/TestPlans/Web Authentication“ wiki page for more details. + +18. **Disable password generation suggestion for password fields** #227 ⇄ #238 (⊶ d8905100) + ↠ _Firefox_ comes with generally great security features like [Firefox Lockwise][firefox-lockwise], but the [suggestion to generate a new random password when focusing a password field][mozw-toolkit-passman-gen] is kind of annoying and not necessary due to the usage of a password manager that includes a password generator. It has therefore been disabled. + +19. **Enable “legacy“ user profile customizations** #228 ⇄ #239 (⊶ d664ea09) + ↠ [As of Firefox version 69, the `userChrome.css` and `userContent.css` files are not loaded by default anymore][moz-ff-rln-69.0#chrome] in order to improve the performance during browser startup. Also see the documentation about [Firefox breaking changes of `userChrome.css`][userchrome-ff_changes_chrome]. + To achieve the previous behavior, the option to load such “legacy“ files has been enabled again. + +### Jetbrains — #137 (⊶ 2fa3d1d5) + +↠ Initially `snwoblocks/jetbrains` for [JetBrains][] IDEs and products provided the following files & directories linked to their destination: + +- `codestyles/arctic-codestyle.xml` → `~/.IntelliJIdea2018.2/codestyles/arctic-codestyle.xml`, `~/Library/Preferences/IntelliJIdea2018.2/codestyles/arctic-codestyle.xml` +- `inspection/arctic-inspections.xml` → `~/.IntelliJIdea2018.2/inspection/arctic-inspections.xml`, `~/Library/Preferences/IntelliJIdea2018.2/inspection/arctic-inspections.xml` +- `keymaps/arctic-keymap.macos.xml` → `~/.IntelliJIdea2018.2/keymaps/arctic-inspections.xml`, `~/Library/Preferences/IntelliJIdea2018.2/keymaps/arctic-keymap.macos.xml` +- `options/code.style.schemes.xml` → `~/.IntelliJIdea2018.2/options/code.style.schemes.xml`, `~/Library/Preferences/IntelliJIdea2018.2/options/code.style.schemes.xml` +- `options/colors.scheme.xml` → `~/.IntelliJIdea2018.2/options/colors.scheme.xml`, `~/Library/Preferences/IntelliJIdea2018.2/options/colors.scheme.xml` +- `options/customization.xml` → `~/.IntelliJIdea2018.2/options/customization.xml`, `~/Library/Preferences/IntelliJIdea2018.2/options/customization.xml` +- `options/editor.codeinsight.xml` → `~/.IntelliJIdea2018.2/options/editor.codeinsight.xml`, `~/Library/Preferences/IntelliJIdea2018.2/options/editor.codeinsight.xml` +- `options/editor.xml` → `~/.IntelliJIdea2018.2/options/editor.xml`, `~/Library/Preferences/IntelliJIdea2018.2/options/editor.xml` +- `options/ide.general.xml` → `~/.IntelliJIdea2018.2/options/ide.general.xml`, `~/Library/Preferences/IntelliJIdea2018.2/options/ide.general.xml` +- `options/keymap.xml` → `~/.IntelliJIdea2018.2/options/keymap.xml`, `~/Library/Preferences/IntelliJIdea2018.2/options/keymap.xml` +- `options/laf.xml` → `~/.IntelliJIdea2018.2/options/laf.xml`, `~/Library/Preferences/IntelliJIdea2018.2/options/laf.xml` +- `options/options.xml` → `~/.IntelliJIdea2018.2/options/options.xml`, `~/Library/Preferences/IntelliJIdea2018.2/options/options.xml` +- `options/project.default.xml` → `~/.IntelliJIdea2018.2/options/project.default.xml`, `~/Library/Preferences/IntelliJIdea2018.2/options/project.default.xml` +- `options/ui.lnf.xml` → `~/.IntelliJIdea2018.2/options/ui.lnf.xml`, `~/Library/Preferences/IntelliJIdea2018.2/options/ui.lnf.xml` +- `disabled_plugins.txt` → `~/.IntelliJIdea2018.2/disabled_plugins.txt`, `~/Library/Preferences/IntelliJIdea2018.2/disabled_plugins.txt` + +These are important configurations for all used _JetBrains_ IDEs and products which are currently [IntelliJ][] (Ultimate Edition) and [GoLand][]. For details about the paths see the documentation about [directories used by the IDE to store settings, caches, plugins and logs][jb-docs-settings_paths]. + +It includes… + +- …the [code style][jb-docs-code-style] XMl configuration file stored in the `codestyles` folder. +- …the [inspections][jb-docs-inspections] XMl configuration file stored in the `inspections` folder. +- …the [keymaps][jb-docs-keymap] XMl configuration files for Linux and macOS stored in the `keymaps` folder. + See the [keymap reference][jb-docs-keymap_refs] for a visual presentation of the default mappings. +- …the [preferences][jb-docs-prefs] XMl configuration files stored in the `options` folder: + - `code.style.schemes.xml` - settings of the currently used code style. + - `colors.scheme.xml` - settings of the currently used color scheme. + - `customization.xml` and `project.default.xml` - settings of the customized [menus and toolbars][jb-docs-menu_toolbar]. + - `editor.codeinsight.xml` - settings of various automatic code transformations. + - `keymap.xml` - the currently used keymap. + - `laf.xml` and `ui.lnf.yml` - settings of the currently used UI theme. + - all other customized preferences defined in the various categories: `editor.xml`, `ide.general.xml` and `options.xml` +- …the list of [disabled plugins][jb-docs-plugins] stored in the `disabled_plugins.txt` file. + +Since _JetBrains_ uses a naming scheme for user configuration folders based on the product major/minor version it is necessary to update the _snowblock_ as soon as the product gets updated to adapt to the new version string. +Due to this naming scheme for the target path of previous targets should be kept for the `clean` and `link` tasks to ensure these are cleaned up after updating to a new product version. + +Over the time the `jetbrains` _snowblock_ evolved through the following changes: + +1. **IntelliJ 2018.3.5** #182 (⊶ 7e270eb0) + ↠ Before the target version was _IntelliJ 2018.2_ which has been updated to the latest version _IntelliJ 2018.3.5_. This includes new configurations as well as the obligatory adjustment for the correct target paths `~/.IntelliJIdea2018.3` (Linux) and `~/Library/Preferences/IntelliJIdea2018.3` (macOS). + +2. **IntelliJ IDEA 2019.1** #193 (⊶ d5ac5d06) + ↠ Updated the previously used target version _IntelliJ 2018.3_ to the latest version [IntelliJ 2019.1][jb-blog-intellij_2019.1]. This includes the obligatory adjustment for the correct target paths `~/.IntelliJIdea2018.3` (Linux) and `~/Library/Preferences/IntelliJIdea2018.3` (macOS). + Also removed the disabled [CVS][] and [TFS][wiki-tfs] plugins since they are [no longer officially supported and not bundled with IntelliJ IDEA anymore][jb-blog-unbundle_tfs_cvs_plug]. + +3. **No _Go_ package clipboard detection** #194 (⊶ a3d062a5) + ↠ Disabled the detection of _Go_ packages fom the clipbaord, e.g. GitHub URLs, to avoid the noise of notifications/popups that asks to install the package as well as improving privacy during the usage of _JetBrains_ products. There is absolute no need to `go get` since Go 1.11+ is used with [_Go Modules_][go-ghwiki-mods]. + +4. **`goimports` for _Go_ import auto formatting** #195 (⊶ 8a02ae76) + ↠ To improve the formatting and adhere to _Arctic Ice Studio_'s _Go_ code style [`goimports][godoc-x-tools-cmd-goimports] is now used to automatically format imports: + + - Only use one import declaration. + - Use of the `-local` flag to put imports local imports after 3rd-party packages. + - Move all stdlib imports into one group. + - Sort all imports. + +5. **IntelliJ IDEA 2019.2** #211 (⊶ 007a3c8c) + ↠ Updated the previously used target version _IntelliJ 2019.1_ to the latest version [IntelliJ 2019.2][jb-blog-rln-2019.2]. This includes the obligatory adjustment for the correct target paths `~/.IntelliJIdea2019.1` (Linux) and `~/Library/Preferences/IntelliJIdea2019.1` (macOS). + Also see _JetBrains_ [“What's New“][jb-new-2019.2] page for a summary of the largest changes and features. + +6. **Fixed invalid JetBrains symlink target parent paths on Linux hosts** #212 (⊶ 86a06411) + ↠ On macOS the _JetBrains_ configuration files are placed right into the main `IntelliJIdea2019.2` directory while on Linux based systems the folder consists of the sub-folders `cache`, `config` and `system` that can also be configured in the `idea64.properties` file. + Before the target path was also the main `~/.IntellihJIdea2019.2` directory, but files must be linked into the nested `config` folder instead. + +7. **IntelliJ IDEA 2019.3** #216 (⊶ 2623363e) + ↠ Updated the previously used target version _IntelliJ 2019.2_ to the latest version [IntelliJ 2019.3][jb-blog-rln-2019.3]. This includes the obligatory adjustment for the correct target paths `~/.IntelliJIdea2019.2` (Linux) and `~/Library/Preferences/IntelliJIdea2019.2` (macOS). + Also see _JetBrains_ [“What's New“][jb-new-2019.3] page for a summary of the largest changes and features. + +### Visual Studio Code — #179 (⊶ 8cebb084) + +↠ Initially `snowblocks/visual-studio-code` for [Visual Studio Code][vscode] provided the following files & directories linked to their destination: + +- `css` → `~/.vscode/css` +- `workspaces` → `~/.vscode/workspaces` +- `keybindings.json` → `~/.config/Code/User/keybindings.json`, `~/Library/Application Support/Code/User/keybindings.json` +- `locale.json` → `~/.config/Code/User/locale.json`, `~/Library/Application Support/Code/User/locale.json` +- `projects.json` → `~/.vscode/projects.json` +- `settings.json` → `~/.config/Code/User/settings.json`, `~/Library/Application Support/Code/User/settings.json` + +
+ +
+ +#179 documents the migration from [Atom][] to [Visual Studio Code][vscode]. +I've used Atom since it came out some years ago and it has always been a great editor and IDE for web development as well as main editor for documents, but _Visual Studio Code_ evolved a lot during the last year. + +Compared to Atom there are many features and improvements that I've really liked to see for Atom. Even though it can be extended and modified a lot there are limitations due to Atom's core in aspects like performance, stability and overall development features like auto-completion and language-awareness. + +_Visual Studio Code_ feels more “language-native“ when it comes to e.g. intelligent auto-completion, the integration of linters and language specific tools. It comes with support for a lot of languages out-of-the-box™ like _JavaScript_/_TypeScript_, _CSS_/_HTML_ and has basic support for native languages like _Go_ or _Rust_. + +The change was not easy for me since I've customized and developed Atom to fit all of development needs, but after some testing time I had to admit that the UX of _Visual Studio Code_ feels way better now. + +I made sure that all my beloved Atom packages are also available as _Visual Studio Code_ extensions (same code base) or an equivalent alternative before actually started the migration. + +Therefore the initial setup now includes… + +- …core and extension settings. +- …custom keybindings. +- …locale configurations. +- …a list of all installed extensions. +- …CSS stylesheets to customize some that'll be loaded by the [“Custom CSS and JS Loader“][vscode-ext-be5invis.custom-css] extension. +- …workspace files. + +The initial setup comes with the following extensions: + +- [Nord](https://marketplace.visualstudio.com/items?itemName=arcticicestudio.nord-visual-studio-code) +- [file-icons](https://marketplace.visualstudio.com/items?itemName=file-icons.file-icons) +- [Prettier](https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode) +- [ESLint](https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint) +- [Markdown Preview Enhanced](https://marketplace.visualstudio.com/items?itemName=shd101wyy.markdown-preview-enhanced) +- [Babel JavaScript](https://marketplace.visualstudio.com/items?itemName=mgmcdermott.vscode-language-babel) +- [vscode-styled-components](https://marketplace.visualstudio.com/items?itemName=jpoissonnier.vscode-styled-components) +- [Path Intellisense](https://marketplace.visualstudio.com/items?itemName=christian-kohler.path-intellisense) +- [Go](https://marketplace.visualstudio.com/items?itemName=ms-vscode.Go) +- [Docker](https://marketplace.visualstudio.com/items?itemName=PeterJausovec.vscode-docker) +- [YAML](https://marketplace.visualstudio.com/items?itemName=redhat.vscode-yaml) +- [EditorConfig](https://marketplace.visualstudio.com/items?itemName=EditorConfig.EditorConfig) +- [Projects+](https://marketplace.visualstudio.com/items?itemName=fabiospampinato.vscode-projects-plus) +- [Polacode](https://marketplace.visualstudio.com/items?itemName=pnp.polacode) +- [Custom CSS and JS Loader](https://marketplace.visualstudio.com/items?itemName=be5invis.vscode-custom-css) +- [Rust (rls)](https://marketplace.visualstudio.com/items?itemName=rust-lang.rust) +- [GraphQL](https://marketplace.visualstudio.com/items?itemName=Prisma.vscode-graphql) + +Over the time the `visual-studio-code` _snowblock_ evolved through the following changes: + +1. **“Code Spell Checker“ extension** #183 (⊶ 898aa45d) + ↠ The [Code Spell Checker][vscode-ext-code-streetsidesoftware.spell-checker] extension checks for errors and also allows to include user-defined dictionaries. + The initial commit added custom dictionaries with some common words as well as project and identity related words. + +
+ +
+ +2. **_Vim_ script syntax highlighting** #184 (⊶ 2bf7227a) + ↠ Added the [vscode-viml-syntax][vscode-ext-dunstontc.viml] extension for syntax highlighting in all _Vim_ script files. + +3. **“Soft“ word wrap for _Markdown_ and _MDX_ documents** #185 (⊶ 4e990f15) + ↠ Enabled “soft“ word wrapping to improve the readability of long sentences and paragraphs in _Markdown_ and _MDX_ documents. + +4. **File associations for `Brewfile`** ##186 (⊶ 140a7476) + ↠ The [`Brewfile`][homebrew/homebrew-bundle] of [Homebrew][] was not detected as _Ruby_ syntax so a association has therefore been added to map it to the `ruby` syntax type. + +5. **File associations for `vimrc`** #191 (⊶ 330357d6) + ↠ The [`vimrc`][vimdoc-start#rc] of [Vim][] was not detected as _Vim_ script syntax so a association has therefore been added to map it to the `viml` syntax type provided by the [vscode-viml-syntax][vscode-ext-dunstontc.viml] extension that was added in #184. + +6. **_Prettier_ plugin as default formatter** #197 (⊶ b4546935) + ↠ As of _Visual Studio Code_ version 1.33.x a notification is shown when there are multiple formatter found for the file type in the currently active editor. Since [Prettier][] supports most languages and is the de-factor standard tool the [Prettier plugin][vscode-ext-esbenp.prettier-vscode] has been set as editor default. + When there are unsupported languages or languages like _Go_ which come with their own toolchain (`gofmt`, `goimports` etc.) the default formatter can be overridden through the languages-specific settings scopes. + +7. **Reset zoom level back to 1** #198 (⊶ 259537d5) + ↠ The UI window zoom level (`window.zoomLevel`) was set to `0.5` due to some configurations changes made to the global system resolution (4k rendering), but has now been changed back to the default value (`1`). + +8. **_MDX_ extension** #199 (⊶ 9a0ac072) + ↠ Added support for many [MDX][] features, syntax highlighting and bracket matching through the [_MDX_ extension][vscode-ext-silvenon.mdx] by _Matija Marohnić_. + +9. **Switched icon theme** #196 (⊶ f0682871) + ↠ Before the [Material Icon Theme][vscode-ext-equinusocio.vsc-material-theme-icons] by _Mattia Astorino_ was used because it provided slick folder icons with customizeable colors and a large set of file type icons with a flat style and pale/contrast-lowered colors making it a great match to my [Nord][vscode-ext-arcticicestudio.nord] theme. + With the latest update the icons were changed to use bright contrast colors while the folder icons changed in a bad way too. + Therefore I've decided to give the popular [Material Icon Theme][vscode-ext-pkief.material-icon-theme] by _Philipp Kief_ another try (last time it had the same style like the current theme after the latest update and way less customization options). It turned out the theme is more advanced in almost all points and provided a good UX and style: + + - Even larger amount of supported file types. + - Multiple theme style accents. + - **Customizable folder and file icon colors** through the `material-icon-theme.saturation` option to reduce the file color contrast and the `material-icon-theme.folders.color` & `material-icon-theme.folders.theme` options for the folders! + - Arrows of folders can be hidden. + Overall the theme full fills all my requirements and is therefore now used as default theme. + +10. **Hide action buttons of sidebar panel headers** #200 (⊶ f77869b5) + ↠ In #179 the [“Custom CSS and JS Loader“][vscode-ext-be5invis.vscode-custom-css] extension was introduced to use custom CSS stylesheets including styles to hide menu buttons from the editor. + To hide the button of sidebar panel headers another selector has been added. + +11. **Disabled breadcrumb navigation** #209 (⊶ 21f8c343) + ↠ As of _Visual Studio Code_ version 1.35 the [breadcrumb navigation is enabled by default][vscode-rln-1.35#breadcrumbs]. They have been disabled again to unclutter the UI. + +12. **Disabled indent guides in tree widget (Explorer)** #210 (⊶ 5cecacc2) + ↠ As of _Visual Studio Code_ version 1.36 the [tree widget support visual indent guide lines][vscode-rln-1.36#tree_indent_guides] are enabled by default. They have been disabled again to unclutter the UI. + +13. **Render whitespace characters only for selected text** #213 (⊶ d8a81414) + ↠ Updated to the new `selection` value for the `editor.renderWhitespace` field introduced in _Visual Studio Code_ [1.37][vscode-rln-1.37#whitespace_select] that allows to only render whitespace characters on selected text. + +
+ +14. **Hide _NPM Scripts Explorer_** #214 (⊶ 673e844e) + ↠ Previously the builtin _NPM Script Explorer_ was hidden by default, but is visible by default as of _Visual Studio Code_ [1.37][vscode-rln-1.37#npm_script_expl] which was justified by the fact that it was „difficult to discover“. + +
+ +15. **Incremental naming of copied files/folders** #215 (⊶ a5093282) + ↠ As of _Visual Stusio Code_ [1.37][vscode-rln-1.37] the automatic incremental naming for copied files that include numbers has been (silently) removed, but than added back as [_explorer improvement_ in version 1.38][vscode-rln-1.38#explo_impr] with two configuration options to either add a `copy` suffix or use a `smart` strategy. The second one adds a number at the end and if some number is already part of the name, it tries to increase that number. This reflects the behavior from VS Code versions `<1.38` and has therefore been set. + +## _Snowflakes_ + +### systemd — #76 ⇄ #77 (⊶ 1eb5ffc9) + +↠ Created the new [systemd][] _snowflake_ that includes + +- documentations about [how to fix the instantaneous MacBook Pro (11,x) suspend wakeup problem after the lid has been closed][archw-mbp-11x#suspend]. +- documentation about [how to configure the lid close behavior][archw-gnome-lid-behavior]. +- a [custom suspend service][archw-suspend-service] implementation and documentation. +- a [`system-sleep` hook][archw-system-sleep-hook] implementation and documentation. + +See [systemd.special(7)][freedesktop-systemd.special] and [systemd.sleep(8)][freedesktop-systemd.sleep] for more details. + +Over the time the `systemd` _snowflake_ evolved through the following changes: + +1. **Replaced/Updated `archbook` with new `iceowl` host** #143, #131 (⊶ c08ca24c) + ↠ There were [various _snowblock_/_snowflake_ configurations that contained the `archbook` host](https://github.com/search?l=&q=archbook+repo%3Aarcticicestudio%2Figloo+created%3A%3E2018-09-18&type=Code) which doesn't exist anymore and has been replaced in most cases with the new `iceowl` host. In cases where the _snowblock_/_snowflake_ is only targeted for Linux the `archbook` host has been removed to make it independent from the host. They can be updated when a new Linux host might be introduced. + +### buku — #138 (⊶ 38ec12d7) + +↠ Initially `snowflakes/buku` for [buku][] provided the bookmarks of the used database exported as HTML file to allow to simply import it using Firefox as well as shell script that can be used to bootstrap a database. + +The files are `igloocrypt` encrypted because they include sensitive data for private SSH servers as well as jo related bookmarks. + +Over the time the `buku` _snowflake_ evolved through the following changes: + +1. **Bookmarks September 2018** #152 ⇄ #159 (⊶ f021edf0) + ↠ The regular bookmark update for September 2018. + + → Added + + - [React Top-Level API][react-docs-api] - The official docs of the React Top-Level API + - [Modular Scale][modularscale] - A web app to calculate modular font scales + - [Type Scale][type-scale] - Another web app to calculate modular font scales + - [Cypress][cypress] - ast, easy and reliable testing for anything that runs in a browser. + - [Let's Encrypt][letsencrypt] - A free, automated, and open Certificate Authority. + - [Firefox Monitor][firefox-monitor] - Firefox Monitor arms you with tools to keep your personal information safe. Find out what hackers already know about you and learn how to stay a step ahead of them. + - [Have I Been Pwned][haveibeenpwned] - Check if you have an account that has been compromised in a data breach. + - [React Patterns][reactpatterns] - Collection of good React patterns. + - [Hacktoberfest][hacktoberfest] - The yearly open source hackathon by Digital Ocean. + - [BitPaper][bitpaper] - A collaborative whiteboard web app + - [React Lifecycle Methods Diagram][react-lifecycle-methods-diagram] - A web app to visualize the React Lifecycle Methods also mentioned in the official React docs. + - [oEmbed][oembed] - Specification for a format for allowing an embedded representation of a URL on third party sites. + + → Updated + + - [Atomic Design][atomicdesign] by Brad Frost + - Removed the `/table-of-contents` path from the URL + - Added new tags: `css-in-js`, `workflow` + +2. **Bookmarks October 2018** #168 (⊶ dd80df52) + ↠ The regular bookmark update for October 2018. + + → Added + + - [Expo][] - A free and open source toolchain built around React Native to help you build native iOS and Android projects using JavaScript and React. + - [unpkg][] - A fast, global content delivery network for everything on npm to quickly and easily load any file from any package using a URL. + - [My Ocotocat][octocat] - Take a break from your build and create an Octocat that’s all you, from whisker tip to tail. + - [Open Collective][opencollective] - A new form of association, transparent by design. A group of people with a shared mission that operates in full transparency. Everyone can see how they receive or spend money. + - [node.green][] - Node.js ECMAScript compatibility tables. + - [Create React App][create-react-app] - Set up a modern web app by running one command. + - [date-fn][] - Modern JavaScript date utility library that provides the most comprehensive, yet simple and consistent toolset for manipulating JavaScript dates in a browser & Node.js. + - [Centering in CSS: A Complete Guide][css-tricks-centering-css-guide] + +3. **Bookmarks November 2018** #170 (⊶ 4807c565) + ↠ The regular bookmark update for November 2018. + + → Added + + - [web.dev][] — Let's build the future of the web. With actionable guidance and analysis, web.dev helps developers like you learn and apply the web's modern capabilities to your own sites and apps. + - [squoosh.app][] — Squoosh is an image compression web app that allows you to dive into the advanced options provided by various image compressors. + - [Contributor Covenant][contributor-covenant] — A Code of Conduct for Open Source Projects + - [Eva Icons][eva-icons] — Eva Icons is a pack of more than 480 beautifully crafted Open Source icons for common actions and items. + - [Feather Icons][feathericons] — Simply beautiful open source icons + - [CommonMark][] — A strongly defined, highly compatible specification of Markdown + - [Overreacted][] — Personal blog by [Dan Abramov][twitter-dan_abramov], React core team developer. + - [JSON-LD][] — A JSON-based Serialization for Linked Data. JSON-LD organizes and connects it, creating a better Web. + + → Updated + + - [AUR][]: Updated the outdated keyword search URL from `https://aur.archlinux.org?K=%s` to `https://aur.archlinux.org/packages/?O=0&K=%s`. + +### Homebrew — #140, #131 (⊶ 43fd982e) + +↠ Initially `snowflakes/homebrew` for [Homebrew][] added a [`Brewfile`][homebrew/homebrew-bundle] and a documentation that includes instructions how to… + +- …update to the latest Homebrew version. +- …upgrade all outdated formulas, casks and taps. +- …bootstrap the `Brewfile` with [Homebrew Bundle][homebrew/homebrew-bundle]. + +Over the time the `homebrew` _snowflake_ evolved through the following changes: + +1. **“Google Chrome“ cask** #148 (⊶ 2b0286dc) + ↠ The [google-chrome][brew-google-chrome] cask has been added that is used for web development with [DevTools][gdev-web-devtools] features only available in Chrome (e.g. Lighthouse) and to test and compare possible browser differences. + +2. **“Gifski“ (desktop ap) and “ImageOptim“** #149 (⊶ 7508e641) + ↠ The [Gifski][] desktop app has been added for simple and fast conversion as well as the [ImageOptim][homebrew/homebrew-cask-imageoptim] cask and [imageoptim-cli][brew-imageoptim-cli] formula to optimize images. + +
+ + + +
+ +3. **Brewfile Update Januar 2019** #173 (⊶ 60274c38) + ↠ The regular batch update for new, changed and deleted _Homebrew_ formulas/casks/taps. + + → Added + + - [cabextract][] — OSS tool to extract _Microsoft cabinet files_ (`.cab`) + - [nq][] — A UNIX CLI queue utility that allows to create very lightweight job queue systems which require no setup, maintenance, supervision, or any long-running processes. + - [wallpaper][macos-wallpaper] — Allows to manage the desktop wallpaper on macOS from the CLI + - [Spectrum][] — The desktop app of [Spectrum][] + - [Visual Studio Code][vscode] — Code editing. Redefined. Free. Open source. Runs everywhere. + + → Updated + + - [KeepassXC][] — An actively developed community-edition of [KeePassX][] + +4. **`hostess` formula** #174 (⊶ 0e8f37f9) + ↠ Added the formula for [hostess][cbednarski/hostess], an **idempotent** command-line utility for managing your `/etc/hosts` file. + +5. **`gotop` formula** #176 (⊶ 5a449b47) + ↠ Added the formula for [gotop][], a terminal based graphical activity monitor inspired by [gtop][gtop] and [vtop][vtop]. + The formula is available through the `cjbassi/gotop` tap. + +
+ +6. **`dive` formula** #177 (⊶ fed546f5) + ↠ Added the formula for [dive][], a tool for exploring a _Docker_ image, layer contents, and discovering ways to shrink your Docker image size. + The formula is available through the `wagoodman/dive` tap.
+ +7. **`streamlink` formula** #178 (⊶ c8dfabe7) + ↠ Added the formula for [streamlink][], a CLI for extracting streams from various websites to a video player of your choosing by using _FFMPEG_ and _youtube-dl_. + +8. **Remove `dep` formula** #187 (⊶ 6c0a0414) + ↠ Since _Go_ 1.11 with [Go Modules][go-ghwiki-mods] `dep` is deprecated and not necessary anymore. + +9. **Fixed typo in `gnu-which` formula name** #188 (⊶ 9c2d48df) + ↠ Fixed thae typo in the formula name of [`gnu-which`][brew-gnu-which] that is currently stored as `gnu-witch`. + +10. **_Kubernetes_ and _Helm_** #189 (⊶ d8a79830) + ↠ Added [Kubernetes][] and [Helm][]. + +11. **_Protocol Buffers_** #190 (⊶ b3b43e3f) + ↠ Added [Protocol Buffers][protocol-buffers] to develop and build with [gRPC][]. + +### iTerm2 — #135, #131, #70 (⊶ 3573a2a2) + +↠ Initially `snowflakes/iterm2` for [iTerm2][] has been created as replacement for [Tilix][] that is designed for GTK based Linux distributions. The _snowflake_ contains the exported JSON file of the created `igloo` profile. + +### udev — #111 ⇄ #112 (⊶ 8e47b174) + +↠ Initially `snwoflakes/udev` for [udev][archw-udev] a custom rule with mappings for the [Logitech R400 Presenter][logitech-r400-presenter] optimized for presentations made with the React library [Spectacle][] and the [Code Slide][spectacle-code-slide] extension. +The documentation contains detailed information about the functionality as well as install & usage instructions for _udev_ custom rules. + +### Visual Studio Code — #179 (⊶ 8cebb084) + +↠ Initially `snowflakes/visual-studio-code` for [Visual Studio Code][vscode] provided the `extensions.json` file that contains the IDs of all currently used _Visual Studio Code_ extesnions. +See the “_Snowblocks_“ → “Visual Studio Code“ section of this changelog for the release version `0.1.0` for more details. + +# Project Initialization + +![Release Date: 2017-01-07](https://img.shields.io/badge/Release_Date-2017--01--07-88C0D0.svg?style=flat-square) + + + +# Historical Background + +Back on 2017-01-07, this repository was created in order to open source my _dotfiles_ that were stored and managed in a private repository on my server back then. The intention was to allow other to learn and use these files or even contribute back even though most of the time preferences and configurations are shaped for personal use. I also liked the great idea of the [“GitHub does dotfiles“][gh-dotfiles] project and the fact that a public repository makes it way easier for me to setup and bootstrap a new system without the requirement to configure and connect to my VPN before being able to clone and use my _dotfiles_. + +Since then this repository changed a lot regarding the structure and data, forming my “digital source-of-truth“ for my systems. The main targets hosts were `illuvigaq` (later on [renamed to `igloo`][gh-10]) and `archbook` where the later was [replaced with `iceowl`][gh-143] later on by switching from _Arch Linux_ running on a _MacBook Pro 11,2 (2016)_ to [_macOS_ on a new _MacBook Pro 15,2 (2018)_][gh-131]. +Even though updates are documented and merged through an organized workflow, the repository was more like a constantly changing and moving kind of cache to keep the _dotfiles_ reasonably maintainable and in sync between the systems. + +The goal was to use the files in daily business, improve up on these usage experiences and finally persist the configurations into this repository. This is the way this repository was used for almost over 3 years and it worked reasonably well, but there are plans for a refactoring of the structure and workflow. In order to clarify this goal release version 0.1.0 is going to set a imaginary marker line in the repository history to persist and document the current repository state. + +The following sections provide detailed documentations about all the _snowblocks_, _snowflakes_ and everything else that has been done to build up the current _dotfile_ state. + +## Repository Structure + +**Bootstrap script** — #1 (⊶ b516e30a) + +↠ Implemented the `bootstrap` shell script to run [snowsaw][] with the following configurations: + +- `SNOWSAW_DIR=.snowsaw` — Path to the _snowsaw_ submodule. +- `SNOWSAW_BIN=.bin/snowsaw` — Path to the _snowsaw_ binary. +- `SNOWBLOCKS_BASE_DIR_NAME=snowblocks` — Name of the base `snowblock` directory. +- `SNOWBLOCKSDIR=.` — Relative path of the current working directory the `bootstrap` script runs in. + +The actual execution command `"${SNOWSAW_DIR}/${SNOWSAW_BIN}" -s "${SNOWBLOCKSDIR}"` allows to add additional options by passing parameters through via `"${@}"`. + +**MIT license migration** — #59 ⇄ #60 (⊶ 11c003ec) + +↠ Before the project code was licensed under the [Apache 2.0][apache-license] license. This often causes problems when developers want to use the project or code parts of it in another project licensed under a less restricted license. +The project migrated to the [MIT license][choosealicense-mit] which is more open, unrestricted and the most used license for open source projects like [React][] which has also recently been [re-licensed][fb-code-blog-react_relicense]. + +**Updated copyright comment header** — #123 (⊶ 2e4d6946) + +↠ Before some files still used a “hard-coded“ copyright year that has now been changed to use the `-present` pattern in order to prevent unnecessary overhead on each year change. +Also the copyright email for „Sven Greb“ was invalid and has been updated to the valid address. + +## _Snowblocks_ + +### Git — #2 (⊶ fd43bdac) + +↠ Initially `snwoblocks/git` for [Git][] provided the following files & directories linked to their destination: + +- `gitconfig` → `~/.git-commit-msg` +- `gitignore` → `~/.gitignore` +- `gitconfig_auth` → `~/.gitconfig_auth` (initially **not** tracked by Git but only created and linked locally) +- `git-commit-msg` → `~/.git-commit-msg` + +Over the time the `git` _snowblock_ evolved through the following changes: + +1. **Conditional configuration inclusion** #23 ⇄ #27 (⊶ 427e6cb5) + ↠ The new [conditional configuration `includes`][git-docs-config#incl] Git feature was introduced in version [2.13][gh-blog-git-2.13] provides a comfortable way to automatically load different configurations based on the current path of the repository. + Many path specific projects have been added to to allow to split the main- and job authentication configurations. + Also see the following related changes: + + - **Conditional configuration includes for "gitlab" and "incubator"** #97 ⇄ #101 (⊶ eca02520) + ↠ Added [conditional configuration `includes`][gh-blog-git-2.13#cond_incl] for the `gitlab` and `incubator` directories using the default main Git configuration. + - **New conditional authentication configuration `include`** #120 (⊶ 36970049) + ↠ Ensured all _communikey_ projects are configured to use the `svengreb` Git user a new conditional include for the `~/code/github/repositories/communicode/` path(s). + - **New conditional authentication config `include`** #171 (⊶ 631ab5f1) + ↠ Ensured all projects by [@svengreb][gh-user-svengreb] are committed with the correct Git credentials a new conditional `include` for the `~/yggdrasil/svengreb/` path has been added. + +2. **Simplified branch printing aliases** #25 ⇄ #28 (⊶ 427e6cb5) + ↠ The branch printing aliases `b` and the extended aliases `bum` and `bm` have been simplified by removing unnecessary flags: + + - The `--list` flag is used to list branches matching a specific pattern. + - Removed `-v`/`-vv`/`--verbose` which shows the commit SHA1 and subject line after each branch. + +3. **Improved logging alias formats** #24 ⇄ #29 (⊶ a316d775) + ↠ The defined ASCII colors codes for the output have been changed to adapt to the terminal colors theme/scheme. + The format has also been simplified and minimized/reduced to relevant information except the extended `ll` and `llf` aliases. + Added the new shorthand aliases `lf` and `llf` were added for a flattened output without topic commits from merges and adapted the style to the existing `lnew` and `lch` aliases. The `lr` alias is now superfluous and has been removed due to the new `ll` and `llf` aliases which include the relative date of a commit. + +4. **Long GPG `keyid` format for Git configuration** #50 ⇄ #54 (⊶ a4065f5d) + ↠ The GPG [`keyid-format`][gpg-docs-conf_opts] has been changed from `short` to `long`. + +5. **Adapted Git commit message template to style guide** #51 ⇄ #55 (⊶ 272d1bff) + ↠ The Git commit message template content was outdated and has been updated to adapt to the new [Git Style Guide][arcticicestudio/styleguide-git]. + +6. **Transparent Git encryption using GPG** #64 ⇄ #69 (⊶ 32c24ceb) + → **Replaced by #113 ⇄ #114 later on!** + ↠ Added a global `.gitattributes` file and configured the global `.gitconfig` file to apply a transparent git encryption with `smudge` and `clean` filters using [GPG]. + In the `.gitattributes` file, a filter for all `*.igloocrypt` file extensions was set. The `.gitconfig` now includes the filter configuration by using `gpg` for the encryption and decryption, processing files just before they‘re checked out and just before they’re staged. Also see GitHub _Gist_ [“Transparent Git encryption with `smudge` & `clean` filters using GPG“][gist-git_smudge_clean] for more details. + ![](https://git-scm.com/book/en/v2/images/smudge.png) + ![](https://git-scm.com/book/en/v2/images/clean.png) + 6.1 **Migration to `git-crypt`** #113 ⇄ #114 (⊶ 4bb0d48e) + ↠ In #64 the concept was described as a simpler and cleaner solution instead of adding a using a tool like [git-crypt][] with the reason that this would make the encryption usage dependent on an external tool and also commits additional files to the repository like the `.git-crypt` folder in the root of the repository. It was also documented that such tools are really useful and necessary when the repository is used by many collaborator, but only adds overhead for personal _dotfile_ repositories. + Anyway, the transparent Git encryption introduced to [GPG] encrypt specific files using the `smudge` and `clean` filters only worked reasonably well with various problems, e.g. caused files to be flagged as „dirty“ (modified) after checkout even if there have been no changes. The pure Git builtin solution with filters was chosen to prevent dependence to external tools, but the latest release versions of Git causing more and more problems due to changes in the behavior e.g. [how `git diff` works][git-docs-diff] (also causing `diff-so-fancy` to be broken). + Therefore the previously implemented solution has been removed again and, against contrary to the opinion in #64, migrated to use [git-crypt][] instead. Even if this added additional files to the repository as well as the external dependency to the tool itself, `git-crypt` is a stable and production proven concept that works safely and allows to really use a transparent encryption. + After playing around and testing `git-crypt` locally the resulting migration steps were as follows: + + - **1** Deleted the custom [`git-diff-igloocrypt`](https://github.com/arcticicestudio/igloo/blob/8e47b174e586694bf4e882575b1931bbd27013d7/snowblocks/git/git-diff-igloocrypt) script. + - **2** Removed the custom [`[diff "igloocrypt"]`](https://github.com/arcticicestudio/igloo/blob/8e47b174e586694bf4e882575b1931bbd27013d7/snowblocks/git/gitconfig#L57-L58) section from the `gitconfig` file. + - **3** Removed the custom filter [`"igloocrypt"`](https://github.com/arcticicestudio/igloo/blob/8e47b174e586694bf4e882575b1931bbd27013d7/snowblocks/git/gitconfig#L73-L75) from the `gitconfig` file. + - **4** Updated the `filter` and `diff` custom global Git attributes handler for all `*.igloocrypt` files to the new `git-crypt` setup. + - **5** Decrypted all `*.igloocrypt` files and backup them up outside the repository. + - **6** Deleted all `*.igloocrypt` files within the repository. + - **7** Initialized `git-crypt` for the repository: `git-crypt init` (default key). + - **8** Added the main Arctic Ice Studio GPG key: `git-crypt add-gpg-user -n ` (`-n` flag prevents automatic commit of generated files). + - **9** Committed the newly generated `.git-crypt` folder. + - **10** Unlocked the repository: `git-crypt unlock`. + - **11** Added all backed up `*.igloocrypt` files back into the repository. + - **12** Ensured all `*.igloocrypt` are tracked to be encrypted: `git-crypt status`. + - **13** Committed all `*.igloocrypt` files. + - **14** Validated the encryption works by locking the repository again: `git-crypt lock`. + +7. **Revised commit message template** #26 (⊶ 8eee3520) + ↠ The Git commit message template contained an deprecated format and have been rewritten from scratch to match the new Arctic Ice Studio [Git Style Guide][arcticicestudio/styleguide-git]. + +8. **`diff-so-fancy` compatible `format-patch` alias** #84 ⇄ #87 (⊶ b9437b57) + ↠ Added a new `fp` ("_format patch_") alias to fix a output problem when using [diff-so-fancy][] with the the `format-patch` command which also prints the ANSI color sequences. This is now prevented by using the `--no-color` option of `git diff`. + The alias now also contains the `--patch-with-stat` option to add additional patch stats like the total amount of changed/removed lines. + +9. **`diff-so-fancy` for `git add` interactive/patch mode** #63 ⇄ #91 (⊶ 82d8cfd9) + ↠ Git [2.14.0][git-rln-2.14.0] includes a restructuring of `diff-highlight` (_contrib/_) for a easier reuse by [diff-so-fancy][]. `diff-so-fancy` for the `git add` interactive/patch mode is now used for the `interactive.diffFilter` configuration. Also the [so-fancy/diff-so-fancy#35 (comment)][so-fancy/diff-so-fancy#35-c] for more details. + Also see the following related changes: + + - **Temporary replace `diff-so-fancy` with bundled `diff-highlight`** #125 (⊶ 535cb0a6) + → See [so-fancy/diff-so-fancy#35][] and [so-fancy/diff-so-fancy#296][] for more details. + ↠ The reason are incompatibility problems of [diff-so-fancy][] with the latest Git versions caused by changes in the diff logic. + + ```raw + fatal: mismatched output from interactive.diffFilter + hint: Your filter must maintain a one-to-one correspondence + hint: between its input and output lines. + ``` + + **NOTE**: Downgrading to a compatible Git version is not an option because [versions <2.17.1 are effected by _CVE-2018-11233_ and and _11235_][git-rln-2.17.1#cve]. + To fix this problem for [interactive patch mode](https://github.com/arcticicestudio/igloo/blob/bb19634544f91c26d66e1f7f53a6bf06210fbaaf/snowblocks/git/gitconfig#L214-L220) the filter was temporary changed to the official [diff-highlight][] tool bundled with Git. + + ```diff + [interactive] + - diffFilter = diff-so-fancy + + diffFilter = diff-highlight + ``` + +10. **Host specific and encrypted user configurations** #93 ⇄ #94 (⊶ 1b564fc5) + ↠ The [`gitconfig_auth`](https://github.com/arcticicestudio/igloo/blob/develop/snowblocks/git/gitconfig_auth) file was previously linked for all hosts and were limited to the hosts `igloo` and `archbook`. Also the `gitconfig_auth_job` file [was ignored](https://github.com/arcticicestudio/igloo/blob/develop/.gitignore#L8) and has been added in encrypted `.igloocrypt` format to the _snowblock_. + Also see the following related changes: + + - **Fixed invalid file symlink targets for Git authentication configurations** #116 (⊶ 6cb11653) + ↠ The Git authentication configurations were updated to be encrypted, but the targets for the symlinks configured within the `snowblock.json` have not been updated to match this change. + +11. **Autocorrect command typos** #150⇄ #157 (⊶ 19a89e2a) + ↠ The [`help.autocorrect`][git-docs-conf#autocorr] configuration allows to run auto-corrected commands with a specified delay time (seconds) after the info message has been shown. This has been added and set to a value of `10` (1 second). + +12. **Git alias to list commits ahead/behind tracking branch** #180 (⊶ 545df096) + ↠ Before only the `lnew` alias was available to list commits behind [`ORIG_HEAD`][git-docs-revs] which only worked after a solved merge conflict. This was not very useful and has been replaced by two new aliases: + + - `lahead` — Lists all commits the current branch is ahead of the tracked origin branch that have not been pushed yet. + - `lbehind` — Lists all ahead commits of the tracked origin branch that are not merged into the current branch yet. + +13. **Fixed invalid exit code handling for IntelliJ `mergetool`** #206 (⊶ 81734203) + ↠ When using IntelliJ as `mergetool` and setting `mergetool.intellij.trustExitCode` to `true`, the `mergetool.intellij.cmd` gets called for all files immediately. After IntelliJ gets closed for the first processed file, all other calls will error because the temporary files passed to `idea merge` as parameters are not valid anymore causing the app to exit. + The problem was that Git is not able to interpret or track started IntelliJ process and fails to listen for the exit code, causing the calls to be fired immediately. This problem was narrowed down to macOS while it works fine for Linux systems. See the [official Git documentation about the `mergetool` command][git-docs-mergetool] for more details. + To fix the problem the `mergetool.intellij.trustExitCode` option was set to `false` and `mergetool.intellij.prompt` to `true` to force Git to wait for the user to confirm the merge is completed and the app window has been closed before continuing with the next queued file. + The only impact is that it requires to press `y` or `n` after solving a conflict instead of only closing the app window and waiting for it to reopen again for the next file. This is also limited to macOS so the impact is very small compared to the broken state when not applying the fix. + In order to dynamically apply the configurations only for macOS systems a `[include]` block is used and set the path to a additional file that will only be linked by _snowsaw_ for macOS based hosts. + Note that the `include` statement/block **must be placed at the bottom** of the main Git configuration file in order to override the initial/default block! + +14. **Git alias for _squash_ merging** #208 (⊶ 78ccf4c7) + ↠ Before only the `m` alias was available to merge the specified branch in non-fast-forward mode. To do a ["squash" merge][ghh-prs#squash] a new `ms` alias has been added using the default fast-forward mode. + +15. **Replaced/Updated `archbook` with new `iceowl` host** #143, #131 (⊶ c08ca24c) + ↠ There were [various _snowblock_/_snowflake_ configurations that contained the `archbook` host](https://github.com/search?l=&q=archbook+repo%3Aarcticicestudio%2Figloo+created%3A%3E2018-09-18&type=Code) which doesn't exist anymore and has been replaced in most cases with the new `iceowl` host. In cases where the _snowblock_/_snowflake_ is only targeted for Linux the `archbook` host has been removed to make it independent from the host. They can be updated when a new Linux host might be introduced. + +### Vim — #3 (⊶ 3e5b053c) + +↠ Initially `snwoblocks/vim` for [Vim][] provided the following files & directories linked to their destination: + +- `vimrc` → `~/.vimrc` + +Over the time the `vim` _snowblock_ evolved through the following changes: + +1. **Paste toggle key mapping** #16 (⊶ 57e84f59) + ↠ Added `` key as toggle for the [`pastetoggle`][vimdoc-opts#pastetoggle] option. + +2. **Automatically wrap left and right** #22 ⇄ #30 (⊶ 60895adc) + ↠ Allowed to move the cursor to the previous/next line after reaching first/last character in the line using the the left < and > arrow keys in normal-, insert- (`<,>`) and visual mode (`[,]`) or the h and l keys. This is configured through the `whichwrap` variable. See `:help whichwrap` for more details. + +3. **Key mapping to move current line and selected block** #21 ⇄ #31 (⊶ ed36f3b9) + ↠ Added a key mapping that allows to easily move the current line or selected block(s) using the Ctrl and the _up_ and _down_ keys. The moved line/block adapts to the new indentation and is available in the `NORMAL`, `INSERT` and `VISUAL` modes. + +4. **Auto toggle sign column** #32 ⇄ #33 (⊶ e08a7767) + ↠ Vim 8 introduced a new option to configure the state of the sign column to be always visible (`yes`), always hidden (`no`) or to automatically toggle (`auto`) when signs are available to display. + This improvement is related to the warning message added to [airblade/vim-gitgutter@dc73a81][] which also advises to remove the custom option `g:gitgutter_sign_column_always = 1` and use `set signcolumn = auto` instead, described by the plugin owner in [airblade/vim-gitgutter#431 (comment)][airblade/vim-gitgutter#431-c-sigcol]. Also see `:help signcolumn` for more details. + +5. **Remap syntax highlighting function** #36 ⇄ #39 (⊶ 474b9b90) + ↠ The `` mapping for the function to show the syntax highlighting groups for the current cursor position collided with the AUR package [plotinus-git][aur-plotinus-git] which provides a searchable command palette in every modern GTK+ application. Is uses the commonly known Control + Shift + P key mapping. The terminal emulator [Tilix][] is a GTK3 application so the command bar is available and has a higher priority as the mapping for the function. + The key mapping for the function was changed to use the K key instead of P. + +6. **Enable 24bit true color support** #37 ⇄ #40 (⊶ 54c35959) + ↠ The `termguicolors` option has been added to enable support for [24bit true colors][gist-term_colors]. This is necessary to use the Nord Vim _Custom Comment Brightness_ theme feature which makes use of HEX defined colors.**NOTE**: This change has been made obsolete later due to the deprecation of the _comment contrast_ option in _Nord Vim_ through the following change: **Comment Color Brightness** [arcticicestudio/nord-vim#145][] ⇄ [arcticicestudio/nord-vim#146][] (⊶ [arcticicestudio/nord-vim@9e0249ca][]) + +7. **Markdown plugin `plasticboy/vim-markdown`** #38 ⇄ #41 (⊶ c2d9cb4a) + ↠ The [plasticboy/vim-markdown][] plugin extends the syntax highlighting support and provides additional features compared to the default syntax definitions. + Also see the following related changes: + + - **Remove Markdown plugin plasticboy/vim-markdown"** #129 (⊶ ff85c3d0) + ↠ Removed the [plasticboy/vim-markdown][plasticboy/vim-markdown] plugin (added in #38) again. The default Markdown syntax has been updated and now also supports many (non-standard) Markdown extensions while the plugin causes some compatibility problems. + +8. **Replace unmaintained vim-coloresque plugin** #42 ⇄ #46 (⊶ c70a440a) + ↠ The [gko/vim-coloresque][] was not actively developed anymore and conflicted with other plugins and has therefore been replaced with the active fork [ap/vim-css-color][]. + +9. **Add `vim-livedown` plugin** #45 ⇄ #47 (⊶ 39480637) + ↠ The [shime/vim-livedown][] plugin adds support for [Livedown][] (Live Markdown Previews) for Vim. + It requires the [`livedown`][npm-livedown] NPM package to be **globally** available! + +10. **JSX syntax highlighting and indentation plugin** #44 ⇄ #48 (⊶ e940c244) + ↠ The [mxw/vim-jsx][] plugin adds syntax highlighting and indenting support for JSX. It is **not a standalone JavaScript plugin** and must be used with a base JS highlighter and integrates with the currently used and recommended [pangloss/vim-javascript][] plugin (vim-jsx's "official" dependency). + The `g:jsx_ext_required` configuration has been set to `0` to also enable JSX syntax highlighting in `.js` files. + +11. **Remove default enabled "list" option** #72 ⇄ #73 (⊶ 6c823718) + ↠ Before the `list` option was enabled by default, but has been disabled due to problems when using copy & paste within _Vim_ with OS- or terminal emulator specific functionalities. + +12. **"NERD Commenter" plugin** #71 ⇄ #75 (⊶ 4ab5c4be) + ↠ Added the [NERD Commenter][nerdcommenter] plugin that configures hotkeys to dynamically comment with language syntax awareness. + The `NERDSpaceDelims` config has been enabled to automatically add spaces after comment delimiters. + +13. **macOS compatibility for line- and block movement keymappings** #172 (⊶ 59a5cc50) + ↠ The key mappings implemented in #31 worked fine on Linux systems, but conflicted with a global (non-modifiable) system key mapping on macOS. Therefore a condition check for the currently running environment is now used to set other specific key mappings for macOS and Linux. + +### Bash — #4 (⊶ 0b664c78) + +↠ Initially `snwoblocks/bash` for [Bash][] provided the following files & directories linked to their destination: + +- `bootstrap` → `~/.bash_profile` +- `bootstrap` → `~/.bashrc` + +Over the time the `bash` _snowblock_ evolved through the following changes: + +1. **Fixed invalid logging directory creation** #5 (⊶ 374f7b7b) + ↠ Removed the remaining code fragment from the old bash framework version causing a `/.log directory can not be created: Permission denied` error message during the bootstrap process. + The `__snowblock_bash::setup_history()` function now also only creates the `.log` directory if it does not exists yet to avoid possible errors. + +2. **`dircolors` color theme** #6 (⊶ 6ab88b9d) + ↠ Added a `dircolors` package configuration to load the `~/.dir_colors` color theme on initialization. + +3. **Fix invalid filename for local `igloo` environment configuration** #7 (⊶ 250bb72e) + ↠ The local untracked environment configuration file `igloo.local` was not sourced caused by the wrong filename [`igloo.env.local`](https://github.com/arcticicestudio/igloo/commit/802258472da1afc0089cdef2a0bd22d9b51718a4#diff-76276899e039b7f3458a2bd0590d2ec8R27) in the [`igloo`](https://github.com/arcticicestudio/igloo/blob/develop/snowblocks/bash/config/env/igloo#L27#L28) environment configuration file. + +4. **Java package specific environment variable `_JAVA_AWT_WM_NONREPARENTING`** #8 (⊶ ccdf6144) + ↠ The environment variable `_JAVA_AWT_WM_NONREPARENTING` has been placed in the specific [`java`](https://github.com/arcticicestudio/igloo/blob/develop/snowblocks/bash/config/pkg/java) package configuration instead of the main [`igloo`](https://github.com/arcticicestudio/igloo/blob/develop/snowblocks/bash/config/env/igloo#L22) environment configuration file. + +5. **Optimized base dir- and module name detection functions** #9 (⊶ c3e9a792) + ↠ The functions to initialize the `$SNOWBLOCK_BASH_BASE_DIR` environment variable and to get the name of the currently running module were unnecessary complicated, unstable and contained duplicated code. + +6. **Renamed environment `illuvigaq` to `igloo`** #10 (⊶ f0856f32) + ↠ The `illuvigaq` environment has been finally renamed to `igloo`. The env configuration [`illuvigaq`](https://github.com/arcticicestudio/igloo/blob/develop/snowblocks/bash/config/env/illuvigaq) symlinked to [`igloo`](https://github.com/arcticicestudio/igloo/blob/develop/snowblocks/bash/config/env/igloo) is not used anymore. + +7. **`sudo` package configuration** #12 (⊶ d605816d) + ↠ Added a package configuration for [`sudo`](https://www.sudo.ws). The `SUDO_PROMPT` environment variable has been set to highlight the word "sudo" with a light background and a dark front followed by `$USER@$HOSTNAME` colorized with bluish _Nord_ colors. + Also see the following related changes: + + - **Core alias `sudo` for alias expansion** #15 (⊶ dad96f29) + ↠ Added a new `sudo` core alias to fix alias expansion when running a user alias via `sudo`. + _bash_ only checks the first word of a command for an alias, any words after that are not checked. That means in a command like `sudo pacman`, only the first word (`sudo`) is checked by _bash_ for an alias while `pacman` is ignored. This can be changed by adding a space to the end of the alias value so _bash_ checks the next word after the alias. + Snippet of the official [bash manual][bash-docs-alias]: + + > The first word of each simple command, if unquoted, is checked to see if it has an alias. If so, that word is replaced by the text of the alias. + > If the last character of the alias value is _blank_, then the next command word following the alias is also checked for alias expansion + + More information and this alias can also be found in the [Arch Linux Wiki for `sudo`][archw-sudo]. + +8. **Core alias for _Spring Boot Remote Debugging_ via Maven** #13 (⊶ 0aecbe39) + ↠ Added a new `sbrd` core alias to remote debug Spring Boot applications. + **JDK 5** or higher should use the`-agentlib` option instead of `-Xdebug -Xrunjdwp` (Java Debug Wire Protocol): `-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=9999"` + Arguments can be appended via `-Drun.jvmArguments` and commands for Maven to run the Spring Boot Application via `mvn spring-boot:run`: `mvn spring-boot:run -Drun.jvmArguments="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=9999"` + +9. **Auto-detect installed _Ruby_ version for `PATH` concatenation** #17 (⊶ 6b0f8e2b) + ↠ Before all _Ruby_ gem paths (`~/.gem/ruby/*/bin`) for each version had to be added to the `$PATH_RUBY_GEMS` variable in the [`igloo`](https://github.com/arcticicestudio/igloo/blob/develop/snowblocks/bash/config/env/igloo) env config manually. + This has been changed to detect installed versions, add it to an array and append it to the `$PATH_RUBY_GEMS` variable separated with a colon (`:`). + +10. **`gulp` package configuration** #18 (⊶ 6b0f856f) + ↠ Added a package configuration for [gulp](http://gulpjs.com) to enable shell completions [provided by `gulp`][gulp-cli#compl]. + Also see the following related changes: + + - **Removed `gulp` package configuration** #145 (⊶ 83bbc253) + ↠ [Gulp][] was not used anymore and has therefore been replaced with [Webpack][] or by simply using scripts or [npm scripts][npm-docs-scripts]. Therefore the [gulp](https://github.com/arcticicestudio/igloo/blob/c1fdba9e6554a4c1cdff32618ddafd700bc1a4cc/snowblocks/bash/config/pkg/gulp) package configuration has been removed. This also improves the shell startup time since the auto-completion script of `gulp` is not sourced anymore. + +11. **Cleaned up _Java_ package config docs** #19 (⊶ 2696ed05) + ↠ Updated references, remove unnecessary double quotes and cleaned up indentations. + +12. **Removed local Ruby and NPM modules from `PATH`** #52 ⇄ #56 (⊶ 900a6b2e) + ↠ Global _Ruby_- and _NPM_ packages should be installed to the default paths instead of customized paths to increase the overall compatibility and adapt to general conventions. + The `PATH_NPM_PACKAGES` and `PATH_RUBY_GEMS` variables were therefore obsolete and have been removed from `PATH`. + +13. **Add `GRADLE_OPTS`** #86 ⇄ #89 (⊶ bffaf260) + ↠ Created a package configuration for [Gradle][] to set and export global default options using the [`GRADLE_OPTS`][gradle-docs-env#opts] environment variable. It includes + + - `org.gradle.daemon=true` - Enable to always use the Gradle daemon to run builds. + Since Gradle 3.0, the daemon is [enabled by default][gradle-docs-rln-3.0#daemon] and is recommended for running Gradle. + - `org.gradle.console=rich` - Always colorize console output. + +14. **Alias for file/directory mode bits (attributes) in octal notation format** #86 ⇄ #88 (⊶ d20e4d20) + ↠ Added a new `lsm` ("_list modes_") alias for the `stat` command to show [file/directory mode bits (attributes)][wiki-fs_perms] in the octal notation format. + +15. **Using `diff-so-fancy` without _Git_** #61 ⇄ #90 (⊶ 08cbbc4c) + ↠ [diff-so-fancy][] has been designed to work within Git controlled directories. To allow to use it to compare files that are not controlled by Git the `--no-index` option of `git-diff` can be used. + The implemented script pipes the output to `less` using the options + + - `-R, --RAW-CONTROL-CHARS` to only display ANSI "color" escape sequences in "raw" form. + - `-F, --quit-if-one-screen` to automatically exit if the entire file can be displayed on the first screen. + - `-X, --no-init` to disable sending the _termcap_ (de)initialization strings to the terminal to avoid unnecessary operations like clearing the screen. + - `-x2, --tabs=n` to use two tab stops. + Also see [so-fancy/diff-so-fancy#220 (comment)](https://github.com/so-fancy/diff-so-fancy/issues/220#issuecomment-282530252) for more details. + +16. **Removed custom `ATOM_HOME` path** #98 ⇄ #102 (⊶ 78042d83) + ↠ The [`ATOM_HOME` environment variable][atom-docs-custom#home_path_env] was assigned to a custom path for the configuration folder of _Atom_ instead of using the default `~/.atom`. The reason was that the folder was located in a kind of "global application configuration collection folder" on another drive mounted on system start. This has now been deprecated and changed to use the default paths of the installed applications. The `~/.atom` folder is now used for _Atom_ which is located on the main SSD drive instead of using a symlink to the external drive. + This change also comes with a great performance boost as the read/write capacity of the external drive HDD was of course way slower than the SSD. + +17. **Source local `~/.bin` for binaries** #99 ⇄ #103 (⊶ 13d4ec36) + ↠ If a local `~/.bin` folder exists it is now added to `PATH` to make all included binaries (executable scripts) available. + +18. **Shortcut alias for `trash-cli`** #100 ⇄ #104 (⊶ eb5dedb8) + ↠ Added a new `t` shortcut alias for [trash-cli][trash-cli] to quickly move files and folders into the trash. + +19. **Alias for `taskwarrior`** #126 (⊶ 12dc9609) + ↠ Renamed the previously used `t` alias of [trash-cli][trash-cli] to `trm` to use it for [taskwarrior][] instead. + +20. **Alias for `timewarrior`** #127 (⊶ 0cdb1dd2) + ↠ Added new shortcut aliases for [timewarrior][]: + + - `tw` = `tw summary` - Shortcut to show the summary. + - `tws` = `timew :ids` - Shortcut to show IDs by default (depends on `alias.tw`). + +21. **Package configuration and alias for _Buku_** #128 (⊶ 68e0289a) + ↠ [Buku][buku] provides the `BUKU_COLORS` environment variable to allow users to define a custom color scheme. It follows the same principle like the `LSCOLORS` environment variables of the BSD `ls` command. + The five letters represent the colors in ordered form of + + - index + - title + - url + - description/comment/note + - tag + See the GitHub repository wiki page about [how to customize colors][buku-wiki-colors] for more details about available letters and their meaning. + Next to this a shortcut alias `bk` has been added to simplify the command usage. + +22. **Environment and auto-completion for `iceowl` host (macOS support)** #146, #131 (⊶ ac9f7bf7) + ↠ Added a new [environment configuration](https://github.com/arcticicestudio/igloo/tree/83bbc2530dbb21f7e734aaa9e33898d7c4c67d50/snowblocks/bash/config/env) for the new `iceowl` host. Also imported the auto-completion scripts bundled with the Homebrew [git][brew-git] and [bash][brew-bash] forumlas. + +23. **Alias for _IINA_** #147 (⊶ 17158a75) + ↠ Added a new _macOS_ specific `iina` alias for [IINA][] to ensure the [MPV][] specific flags [`--mpv-config-dir`][mpv-doc-config-dir] and `--mpv-watch-later-directory` are always used which contain the paths to the [MPV configuration files][mpv-doc-config-files] and the [_watch-later_ folder][mpv-doc-config-folder-wl] of the [`--save-position-on-quit` feature][mpv-doc-save-pos]. This ensures the _watch-later_ state/position files are always synced with `igloosync` to ensure consitency with other synced hosts like `igloo`. + +24. **Shorthand script to open files, paths or URLs** #169 (⊶ dedfd67b) + ↠ Most OS provide builtin tools to open a file, path or URL with the associated application based on the MIME type. To use a uniform command for it a new script `open` has been implemented. + When running on Linux it'll use the XDG compliant tool `xdg-open` from [xdg-utils][] while it'll pass through the parameters to the builtin application also called `open` when run on macOS. + +25. **Basic _Go_ environment setup** #181 (⊶ ef8c84d4) + ↠ I started to use [Go][] as my main programming language almost 3 years for everything from CLIs, high performant and lightweight backends/microservices with performance and intercompatibility in mind as well as for daily tools. + _Go_ comes with a fantastic toolchain that also doesn't require a lot of necessary setups, therefore this basic setup is enough to work efficiently in combination with the awesome [IntelliJ Go plugin][jb-plg-go], a minimal setup for [Vim with the `govim` plugin][govim] and a basic integration for [Go in VS Code][vscode-docs-go]. + I've used the following basic setup: + - Defined the `GOPATH` environment variable to point to the custom location at `$HOME/.go`. Even though I only use [Go Modules][go-ghwiki-mods] this is required for backwards compatibility, the toolchain as well as the resulting binaries in `$GOPATH/bin` + - Added `$GOPATH/bin` to `$PATH` for all hosts. + +
+ +26. **Mage package configuration** #192 (⊶ 39069bef) + ↠ Added a package configuration for [Mage][], a make/rake-like build tool using Go allowing to write plain-old go functions that'll automatically be used as Makefile-like runnable targets. See the [official documentation about environment variables][mage-docs-env] for more information. + + - `MAGEFILE_CACHE` — Changed the path of the directory for the magefile build cache from the default location `$HOME/.magefile` to `/tmp/.magefiles` since there is no need to persist the cache across system restarts. + +27. **Fixed determing the exit status of last shell command** #207 (⊶ 6f483af3) by [@xulongwu4][gh-user-xulongwu4] + ↠ The exit status of the last shell command was not determined at the very beginning of the `compile_prompt` function which caused a wrong code output. + +### pacman — #14 (⊶ fa6909c8) + +↠ Initially `snwoblocks/pacman` for [pacman][] provided the following files & directories linked to their destination: + +- `makepkg.conf` → `~/.makepkg.conf` +- `pacman.conf.igloo`, `pacman.conf.archbook` → `~/.pacman.conf` + +The initial implementation also included + +- a package configuration for `pacaur` to set the `AURDEST` environment variable. +- the new `STORE_PKGS` environment variable added to the `igloo` and `archbook` environment configurations. +- the shorthand `pacman --config ` shell alias. +- _pacman_ configurations for the hosts `igloo` and `archbook`. + +Over the time the `pacman` _snowblock_ evolved through the following changes: + +1. **Everyone loves candies!** #34 ⇄ #35 (⊶ be4d52e0) + ↠ Enabled [pacman][]'s _candy eating mode_ for progress bars via `ILoveCandy` config boolean. See [`conf.c`](https://git.archlinux.org/pacman.git/tree/src/pacman/conf.c#n483) in _pacman_'s source code for more details. + +2. **Replaced/Updated `archbook` with new `iceowl` host** #143, #131 (⊶ c08ca24c) + ↠ There were [various _snowblock_/_snowflake_ configurations that contained the `archbook` host](https://github.com/search?l=&q=archbook+repo%3Aarcticicestudio%2Figloo+created%3A%3E2018-09-18&type=Code) which doesn't exist anymore and has been replaced in most cases with the new `iceowl` host. In cases where the _snowblock_/_snowflake_ is only targeted for Linux the `archbook` host has been removed to make it independent from the host. They can be updated when a new Linux host might be introduced. + +
+ +3. **Removed ignored pacman packages** #49 ⇄ #53 (⊶ b853ec8c) + ↠ Before the `harfbuzz`, `harfbuzz-icu` and `gdk-pixbuf2` packages were added to the _pacman_ ignore list to [fix the harfbuzz + _Infinality_ issue](https://gist.github.com/cryzed/e002e7057435f02cc7894b9e748c5671) which caused broken font rendering & boot failures on most systems due to incompatibility with the updated `freetype2` package, which superseded the `infinality-bundle`. + These packages have now been removed from the ignore list against since the issues have already been fixed some days after the issue occurred. + Also see the following related changes: + - **Removed ignored pacman packages for `archbook` host** #53 (⊶ 880b3fac) + ↠ #53 only removed the ignored packages for the `igloo` host which has now also been ported for `archbook`. + +### systemd — #58 (⊶ ab4513b0) + +↠ Initially `snwoblocks/systemd` for [systemd][] provided user [service][freedesktop-systemd-srv] and [units][freedesktop-systemd-unit] to + +- automount the `sync` [gocryptfs][] volume located in the [Dropbox][] folder receiving the password stored in the [GNOME keyring][archw-gnome-keyring] via `secret-tool` ([`libsecret`][libsec]). The service unit is named `igloosync-dropbox`. +- automatically run a instance of the [`ssh-agent`][archw-ssh_ag] using `$SSH_AUTH_SOCK` and let _systemd_ manage the `$SSH_AGENT_PID` environment variable. + +This includes a documentation to describe the requirements for the `igloosync-dropbox.service` file providing information + +- about how to create the required `gocryptfs` password stored- and received via `secret-tool`. +- about how to configure [wiki-fuse][] ([libfuse][]) with the `/etc/fuse.conf` file to allow non-root users to specify the `allow_other` or `allow_root` mount options which overrides the security measure restricting file access to the filesystem owner, so that all users (including root) can access the files. This is necessary to access the files of the mounted `gocryptfs` volume with applications that are run via `sudo`. It is used in the `pacman` _snowblock_ for the local package repository to prevent a _Permission Denied_ exception when running `pacman` (e.g. `sudo pacman -Sy`) if the `gocryptfs` volume is not mounted with the `-allow_other` option. Please note that `libfuse` has a **[unresolved security bug][libfuse/libfuse#15]** when using the `allow_other` mount option as [described in the official documentation][libfuse-sec], but is of **little concern if the filesystem is accessible only to the mounting user** which is the case since these are **dotfiles for a personal system**: + +> No other user (including root) can access the contents of the mounted filesystem (though this can be relaxed by allowing the use of the `allow_other` and `allow_root` mount options in `/etc/fuse.conf`) +> +> If you intend to use the allow_other mount options, be aware that FUSE has an unresolved [security bug][libfuse/libfuse#15]: if the `default_permissions` mount option is not used, the results of the first permission check performed by the file system for a directory entry will be re-used for subsequent accesses as long as the inode of the accessed entry is present in the kernel cache - even if the permissions have since changed, and even if the subsequent access is made by a different user. This is of little concern if the filesystem is accessible only to the mounting user (which has full access to the filesystem anyway), but becomes a security issue when other users are allowed to access the filesystem (since they can exploit this to perform operations on the filesystem that they do not actually have permissions for). +> +> This bug needs to be fixed in the Linux kernel and has been known since 2006 but unfortunately no fix has been applied yet. If you depend on correct permission handling for FUSE file systems, the only workaround is to use `default_permissions` (which does not currently support ACLs), or to completely disable caching of directory entry attributes. + +The target paths `~/.config/systemd/user` for all unit files will be created by _snowsaw_ if they doesn't exist yet. + +The `igloosync-dropbox.service` unit file is only linked for the `igloo` and `archbook` hosts while the `ssh-agent.service` file will be linked by default. + +Over the time the `system` _snowblock_ evolved through the following changes: + +1. **Replaced/Updated `archbook` with new `iceowl` host** #143, #131 (⊶ c08ca24c) + ↠ There were [various _snowblock_/_snowflake_ configurations that contained the `archbook` host](https://github.com/search?l=&q=archbook+repo%3Aarcticicestudio%2Figloo+created%3A%3E2018-09-18&type=Code) which doesn't exist anymore and has been replaced in most cases with the new `iceowl` host. In cases where the _snowblock_/_snowflake_ is only targeted for Linux the `archbook` host has been removed to make it independent from the host. They can be updated when a new Linux host might be introduced. + +### XDG — #74 ⇄ #78 (⊶ 89b68775) + +↠ Initially `snwoblocks/xdg` for _XDG_/[freedesktop.org][] specifications provided the following files & directories linked to their destination: + +- `user-dirs.conf` → `~/.config/user-dirs.conf` +- `user-dirs.dirs` → `~/.config/user-dirs.dirs` +- `user-dirs.locale` → `~/.config/user-dirs.locale` +- `bookmarks` → `~/.config/gtk-3.0/bookmarks` +- `applications/atom.desktop` → `~/.local/share/applications/atom.desktop` +- `applications/evolution.desktop` → `~/.local/share/applications/evolution.desktop` +- `applications/gpick.desktop` → `~/.local/share/applications/gpick.desktop` +- `applications/gtkhash.desktop` → `~/.local/share/applications/gtkhash.desktop` +- `applications/intellij-idea-ce.desktop` → `~/.local/share/applications/intellij-idea-ce.desktop` +- `applications/intellij-idea-u.desktop` → `~/.local/share/applications/intellij-idea-u.desktop` +- `applications/minecraft.desktop` → `~/.local/share/applications/minecraft.desktop` +- `applications/org.gnome.gedit.desktop` → `~/.local/share/applications/org.gnome.gedit.desktop` +- `applications/org.gnome.Nautilus.desktop` → `~/.local/share/applications/org.gnome.Nautilus.desktop` +- `applications/org.gnome.Screenshot.desktop` → `~/.local/share/applications/org.gnome.Screenshot.desktop` +- `applications/pycharm-community.desktop` → `~/.local/share/applications/pycharm-community.desktop` +- `applications/shotwell-viewer.desktop` → `~/.local/share/applications/shotwell-viewer.desktop` +- `applications/webstorm.desktop` → `~/.local/share/applications/webstorm.desktop` +- `autostart/dropbox.desktop` → `~/.local/share/autostart/dropbox.desktop` +- `autostart/plank.desktop` → `~/.local/share/autostart/plank.desktop` +- `settings.ini` → `~/.config/gtk-3.0/settings.ini` + +This includes [freedesktop][]'s _xdg_ specifications for + +- user-specific [`.desktop` application files][archw-dfile]. +- user-specific [autostart `.desktop` files][freedesktop-autostart]. +- [XDG user directories][archw-ud] configurations and document templates. +- [XDG bookmarks][fd-bookmarks] + +Over the time the `xdg` _snowblock_ evolved through the following changes: + +1. **Removed GNOME Nautilus `.desktop` file** #105 (⊶ 7125312e) + ↠ The custom `org.gnome.Nautilus.desktop` file isn't necessary anymore since the the missing MIME type handler has been added in the upstream which is necessary to open Nautilus from within other applications to e.g. show a project folder in the file system. + +
+ +2. **Updated and removed obsolete application desktop files** #118 (⊶ f2dffb76) + ↠ Some XDG application `.desktop` files were not required anymore because the latest upstream versions have been adapted and improved to match the custom configurations: + + - [JetBrains IntelliJ IDEA Ultimate Edition][arch-jb-idea-u] binary `/opt/intellij-idea-ultimate-edition/bin/idea.sh` is now linked to `/usr/bin/idea` and `/usr/bin/intellij-idea-ultimate-edition`. The desktop file is now uniformly named `/usr/share/applications/jetbrains-idea.desktop`. + - [JetBrains IntelliJ IDEA Community Edition][arch-jb-idea-ce] binary `/opt/intellij-idea-community-edition/bin/idea.sh` is now linked to `/usr/bin/idea`. The desktop file is now named uniform `/usr/share/applications/jetbrains-idea.desktop`. + - [JetBrains Webstorm][aur-jb-ws] binary `/opt/webstorm/bin/webstorm.sh` is now linked to `/usr/bin/webstorm` and the desktop file is now named uniform `/usr/share/applications/jetbrains-webstorm.desktop`. + - [JetBrains Pycharm Community Edition][arch-jb-py-ce] binary `/opt/pycharm-community-edition/bin/pycharm.sh` is now linked to `/usr/bin/pycharm`, but the desktop file is still named `/usr/share/applications/pycharm.desktop`. + - [Atom 1.28][atom-blog-1.28] included an upgrade to Electron 2.0 and now ships with an standalone launcher(`/usr/lib/atom/atom`) instead of using the Electron binary (`electron `). + +3. **Custom _JetBrains IntelliJ IDEA Ultimate_ editor desktop launcher** #203 (⊶ d4f474eb) + ↠ _IntelliJ IDEA_ version 2019.1.3 came with a new “hardcoded“ icon so the `.desktop` launcher required a customization to use the correct icon theme name. + +4. **Custom _KeePassXC_ desktop launcher** #204 (⊶ 6d86a967) + ↠ [KeePassXC][] supports GTK3 out-of-the-box, but unfortunately doesn't adapted to the current system theme and icon them making the UI looking really unpleasant and outdated. + To use a modern style the app now starts with the [`QT_QPA_PLATFORMTHEME` environment variable set to `gtk2`][archw-qt#fail_update] to [ensure the app respects the Qt5 style overrides][keepassxreboot/keepassxc#1931]. + +5. **Replaced/Updated `archbook` with new `iceowl` host** #143, #131 (⊶ c08ca24c) + ↠ There were [various _snowblock_/_snowflake_ configurations that contained the `archbook` host](https://github.com/search?l=&q=archbook+repo%3Aarcticicestudio%2Figloo+created%3A%3E2018-09-18&type=Code) which doesn't exist anymore and has been replaced in most cases with the new `iceowl` host. In cases where the _snowblock_/_snowflake_ is only targeted for Linux the `archbook` host has been removed to make it independent from the host. They can be updated when a new Linux host might be introduced. + +### cower — #65 ⇄ #79 (⊶ 503561de) + +↠ Initially `snwoblocks/cower` for _cower_ (rewritten as [auracle][]) provided the following files & directories linked to their destination: + +- `config` → `~/.config/cower/config` + +### htop — #68 ⇄ #80 (⊶ 952d502b) + +↠ Initially `snwoblocks/htop` for [htop][] provided the following files & directories linked to their destination: + +- `htoprc` → `~/.config/htop/htoprc` + +### plank — #81 ⇄ #82 (⊶ 97e2182b) + +↠ Initially `snwoblocks/plank` for [plank][archw-plank] provided the following files & directories linked to their destination: + +- `igloo/launchers` → `~/.config/plank/igloo/launchers` +- `archbook/launchers` → `~/.config/plank/archbook/launchers` +- `themes` → `~/.config/plank/themes/igloo` + +This includes application launchers for the host specific `igloo` and `archbook` profiles and a minimal, non-obstructive theme called `igloo` with a transparent background and no shadow- and glow effects. + +Over the time the `plank` _snowblock_ evolved through the following changes: + +1. **Removed GNOME Nautilus `.desktop` file** #118 (⊶ 7125312e) + ↠ See the changelog section of _XDG_ for more details. + +2. **Custom _JetBrains IntelliJ IDEA Ultimate_ editor desktop launcher** #203 (⊶ d4f474eb) + ↠ See the changelog section of _XDG_ for more details. + +3. **Removed _Google Chrome_ from desktop app launcher** #205 (⊶ 1c969ff9) + ↠ Since the re-switch to Firefox in #139, _Google Chrome_ is only used for compatibility tests for projects like web apps and websites (_React_, _Gatsby.js_ etc.) as well as private session when using web apps especially build for Google Chrome's APIs/web capabilities. + +4. **Replaced/Updated `archbook` with new `iceowl` host** #143, #131 (⊶ c08ca24c) + ↠ There were [various _snowblock_/_snowflake_ configurations that contained the `archbook` host](https://github.com/search?l=&q=archbook+repo%3Aarcticicestudio%2Figloo+created%3A%3E2018-09-18&type=Code) which doesn't exist anymore and has been replaced in most cases with the new `iceowl` host. In cases where the _snowblock_/_snowflake_ is only targeted for Linux the `archbook` host has been removed to make it independent from the host. They can be updated when a new Linux host might be introduced. + +### tilix — #70 ⇄ #83 (⊶ 5c12e6cd) + +↠ Initially `snwoblocks/tilix` for [Tilix][] provided the following files & directories linked to their destination: + +- `bookmarks.json.igloocrypt` → `~/.config/tilix/bookmarks.json` + +Also includes a [dconf][] dump of the current system configurations. See [gnunn1/tilix#571][gnunn1/tilix#571] for more details. + +Over the time the `tilix` _snowblock_ evolved through the following changes: + +1. **Updated and extended bookmarks** #119 (⊶ 962bc284) + ↠ Updated some paths of bookmarks that were not up-to-date and added some that were missing. + +2. **Replaced/Updated `archbook` with new `iceowl` host** #143, #131 (⊶ c08ca24c) + ↠ There were [various _snowblock_/_snowflake_ configurations that contained the `archbook` host](https://github.com/search?l=&q=archbook+repo%3Aarcticicestudio%2Figloo+created%3A%3E2018-09-18&type=Code) which doesn't exist anymore and has been replaced in most cases with the new `iceowl` host. In cases where the _snowblock_/_snowflake_ is only targeted for Linux the `archbook` host has been removed to make it independent from the host. They can be updated when a new Linux host might be introduced. + +### tmux — #66 ⇄ #92 (⊶ 56595bde) + +↠ Initially `snwoblocks/tmux` for [tmux][] provided the following files & directories linked to their destination: + +- `tmux.conf` → `~/.tmux.conf` + +If the _tmux_ plugin manager [tpm][] doesn't exist it will be [downloaded automatically][tmux-docs-autodown]. +Also see the [“tmux“ Arch Linux Wiki page][archw-tmux] for more details. + +### NPM — #95 ⇄ #96 (⊶ a916aa17) + +↠ Initially `snwoblocks/npm` for [NPM][] provided the following files & directories including + +- the [`.npmrc` configuration file][npm-docs-rc] to define the [`npm init`][npm-docs-config] options + - `init-author-name` + - `init-author-email` + - `init-author-url` + - `init-version` + - `init-license` +- the `package-lock` option with `false` to disable the generation of the [`package-lock.json`][npm-docs-pkg-lock] file. +- the `save-exact` option to always save the exact dependency versions in the [`package.json`][npm-docs-pkg]. + +Over the time the `npm` _snowblock_ evolved through the following changes: + +1. **Enable NPM's package-lock feature** #142 (⊶ 22635a83) + ↠ The [`package-lock.json`][npm-docs-pkg-lock] file was disabled in the global [`npmrc`][npm-docs-rc] file since it hasn't been used due to a various problems regarding merge conflicts and unintended transitive dependency updates on each `npm install`. These problems have been fixed in later NPM release versions. This allows to use this feature again to ensure stable and reproducible builds. + +2. **Replaced/Updated `archbook` with new `iceowl` host** #143, #131 (⊶ c08ca24c) + ↠ There were [various _snowblock_/_snowflake_ configurations that contained the `archbook` host](https://github.com/search?l=&q=archbook+repo%3Aarcticicestudio%2Figloo+created%3A%3E2018-09-18&type=Code) which doesn't exist anymore and has been replaced in most cases with the new `iceowl` host. In cases where the _snowblock_/_snowflake_ is only targeted for Linux the `archbook` host has been removed to make it independent from the host. They can be updated when a new Linux host might be introduced. + +### atom — #106 (⊶ 528383c5) + +↠ Initially `snwoblocks/atom` for [Atom][] provided the following files & directories linked to their destination: + +- `config.cson` → `~/.atom/config.cson` +- `keymap.cson` → `~/.atom/keymap.cson` +- `project-folder.cson` → `~/.atom/project-folder.cson` +- `packages.cson` → `~/.atom/packages.cson` + +This includes + +- the main [CSON based condifuration][atom-docs-custom#cson_conf] file +- the [keymapping configuration][atom-docs-keymap] file + +Support for the [package-sync][atom-pkg-package-sync] package is provided through the `packages.cson` file including all installed packages. The `project-folder.cson` configuration file for the [project-folder][atom-pkg-project-folder] package contains all necessary group entries. + +Over the time the `atom` _snowblock_ evolved through the following changes: + +1. **Color Profile** #115 (⊶ dc4d22d6) + ↠ Atom 1.28 introduced [support for custom ICC color profiles][atom-blog-rln-1.28#color_profile] based on the upgrade to Electron 2.x which in turn is based on the latest Chrome version. This version includes changes to the color rendering and now respects the color profile configured in the OS settings. + Due to this change for many users the [colors appear to be pale][atom/atom#17356]. To bring back the previous (more stronger) color rendering Atoms _Core_ → „Color Profile“ has been changed from „Use color profile configured in the operating system“ to „Use sRGB color profile“. + +
With OS color profile
+
With sRGB color profile
+ +
+ +2. **Rust support: `language-rust` package** #121 (⊶ 11ca4319) + ↠ Added support for [Rust][] via the [language-rust][atom-pkg-language-rust] community package. + +3. **New project paths** #122 (⊶ bb196345) + ↠ Added groups for the new project paths: + + - **communikey**: `~/code/github/repositories/communicode/*` + - **NPM**: `~/yggdrasil/npm/*` + - **snowsaw**: `~/yggdrasil/snowsaw` + +4. **Include default package configuration keys** #124 (⊶ 7554efce) + ↠ Before the configuration keys were initialized with the default value were not added to user's `~/.atom/config.cson`. To ensure the same Atom setup even when some default values are changed these have been included in the `config.cson`. This also includes keys for all core and community packages. + +5. **Atom IDE** #151 ⇄ #158 (⊶ 39707355) + ↠ Added the [Atom IDE][atom-ide] base package [atom-ide-ui][atom-pkg-atom-ide-ui] and the [ide-typescript][atom-pkg-ide-typescript] package for JavaScript (Babel, ES6, React etc.) and Typescript. + +6. **Atom IDE - Don't show debugger when setting breakpoints** #166 (⊶ 360f7140) + ↠ By default, when [setting a breakpoint][nuclide-docs-bp] the [debugger][nuclide-docs-db] was shown automatically. Sometimes this was not the desired goal (e.g. by accidentally setting a breakpoint) and has been disabled. + +7. **Keymap to move caret to the end/start of the current line** #167 (⊶ 360fb8b1) + ↠ To simply move the caret to the end/start of the current line instead of using the end and pos keys a new mapping has been added for Linux based OS: + - **Move to the end of the current line**: Ctrl (super) + alt + + - **Move to the start of the current line**: Ctrl (super) + alt + + The default mappings + + / for macOS are already provided by default. + +### taskwarrior — #107 (⊶ c6534e63) + +↠ Initially `snwoblocks/taskwarrior` for [Taskwarrior][] provided the following files & directories linked to their destination: + +- `taskrc` → `~/.taskrc` +- `nord.theme` → `~/.task/nord.theme` + +This includes the _key=value_ based [`.taskrc` configuration][taskwarrior-docs-conf] file and a [Nord][] based color theme to be included in `.taskrc`. + +- **Context** — The [context][taskwarrior-docs-cx] feature is used to separate all public projects and private/job related tasks. +- **UDA (User Defined Attributes)** — The [UDA][taskwarrior-docs-uda] feature is used to create custom attributes to add a assignee, a estimation value and the GitHub issue ID to a task. +- **Reports** — The [reports][taskwarrior-docs-r] feature is used to extend and optimize the task output. The custom report should be set to `default.command` to replace the default `next` report. +- **Aliases** — The config contains aliases to align with the alias workflow of other _snowblocks_ like _bash_ and _Git_. This improves the usability, because there are several commands that start with the same characters making it slower to be used with the auto completion: + - `a` :arrow_right: `add` + - `bd` :arrow_right: `burndown.daily` + - `cx` :arrow_right: `context` + - `e` :arrow_right: `edit` + - `ls` :arrow_right: `list` + - `mod` :arrow_right: `modify` +- **Alternative workflows** — The _Taskwarrior_ workflow is changed later on to use multiple databases per use-case like e.g. one database per project to make better use of the features like _projects_, _tags_ and _context_ with finer grained filters. + +Over the time the `taskwarrior` _snowblock_ evolved through the following changes: + +1. **Time tracking hooks** #108 (⊶ 2e541f5e) + ↠ Created two hooks to track the duration a task was active. Both hooks are written in Python 3 and require a Taskwarrior version `>=2.4`. + + - **With `totalactivetime` UDA** — The first hook makes use of a new UDA called `totalactivetime` of type `duration` which stores the total time in seconds. Every time a task gets stopped the value gets added to the old value. To simplify the communication with the [Taskwarrior Hook v2 API][taskwarrior-docs-hooks2] the hook uses the [taskw][pypi-taskw] Python package which provides the bindings for Python. + **Note: This requires [taskw][pypi-taskw] as a direct dependency and must be installed on the target system!** The package is [available from the AUR][aur-python-taskw]. + - **Taskwarrior integration** — The second hook is a fork from the [official Taskwarrior `on-modify.taskwarrior` hook][timewarrior-hook-on-modify]. It comes bundled with _Taskwarrior_, but can not be used via symlink, because the file is owned by the `root` user which prevents the script from being executed when symlinked. + The usage of the hook is also [documented in the official Timewarrior docs][taskwarrior-docs-tw_int]. + +2. **taskopen integration** #110 (⊶ 759fdc69) + ↠ Integrated [taskopen][] by adding the main [`.taskopenrc` configuration][taskopen#conf] file and aliases to simply adding notes (`an`) and open (`o`) task notes/annotations. + +3. **More than one active task** #117 (⊶ 8d013adc) + ↠ The default _Taskwarrior_ limit of active tasks is one. However, there are many use cases where multiple active tasks must be used, e.g. when working on an GitHub issue and the associated PR which are both handled in separate tasks or when working on tasks that are dependent on other tasks. + The limited has therefore been increased to allow to use _Taskwarrior_ for such use cases without having to deal with limitation errors. + +4. **taskopen workaround support for macOS** #134,#131,#110 (⊶ 47af7adc) + ↠ The management of installed [Perl modules][cpan-doc-modules] on macOS is not as simple and well thought through like the concept of package managers on Linux systems, e.g. via [pacman][] on [Arch Linux][archlinux]. There are problems when is comes to configuring the runtime path the modules have been installed to even when using the most popular module manager called [cpanminus][]. This causes the [Taskwarrior][] plugin [taskopen][] fail to load because the Perl core module `JSON` can't be found and loaded. + As a workaround a custom script has been implemented to create and open a attached note of an task: + + 1. Use the [`_get`][taskwarrior-doc-api-_get] function of the [Taskwarrior DOM API][taskwarrior-doc-dom-api] to extract any stored piece of information of an task. This allows to receive the [UUID of an task][taskwarrior-doc-ids]. + 2. Create a custom `on` (open note) [Taskwarrior alias][taskwarrior-doc-alias] to run the implemented custom script via the `execute` command. + + The logic of the script follows the same like taskopen uses for default notes: + + - Use the [UUID of an task][taskwarrior-doc-ids] as the note filename. + - Simply pass the file to an editor (in this case [Atom][]) which will… + - …create a new file if it doesn't exist yet. + - …open the file if it already exists. + + Note that **this script is not limited to macOS** but can also be used for any other Linux host! It is only necessary to use it on macOS due to the problems described above. + +5. **Link whole Taskwarrior "hooks" and "scripts" folders** #201 (⊶ 961293ba) + ↠ Instead of linking single files from the `hooks` and `scripts` Taskwarrior folders both folders are now linked directly. + +6. **Use single VS Code instance to open task notes** #202 (⊶ e9c04c6f) + ↠ When opening a task note, it is now made sure to add it to the already opened VS Code instance instead of opening a new one by using VS Code's `reuse-window` CLI flag. + +7. **Replaced/Updated `archbook` with new `iceowl` host** #143, #131 (⊶ c08ca24c) + ↠ There were [various _snowblock_/_snowflake_ configurations that contained the `archbook` host](https://github.com/search?l=&q=archbook+repo%3Aarcticicestudio%2Figloo+created%3A%3E2018-09-18&type=Code) which doesn't exist anymore and has been replaced in most cases with the new `iceowl` host. In cases where the _snowblock_/_snowflake_ is only targeted for Linux the `archbook` host has been removed to make it independent from the host. They can be updated when a new Linux host might be introduced. + +### timewarrior — #109 (⊶ 15688f30) + +↠ Initially `snwoblocks/timewarrior` for [Timewarrior][] provided the following files & directories linked to their destination: + +- `timewarrior.cfg.archbook`, `timewarrior.cfg.igloo` → `~/.timewarrior/timewarrior.cfg` +- `nord.theme` → `~/.timewarrior/nord.theme` + +This includes the [`timewarrior.cfg` configuration][timewarrior-docs-conf] files for the `igloo` and `archbook` hosts as well as a [Nord][] based [color theme][timewarrior-docs-themes] that is imported imported in the `timewarrior.cfg` file. +The default `day` reports should include the month name and week number. + +Over the time the `timewarrior` _snowblock_ evolved through the following changes: + +1. **Timewarrior config for iceowl (macOS support)** #144,#131 (⊶ c1fdba9e) + ↠ Created a new configuration for the new `iceowl` host due to the usage of absolute paths in the configuration previous files of [Timewarrior][]. This requires a configuration per host, e.g. for different paths to the used color theme. + +2. **Replaced/Updated `archbook` with new `iceowl` host** #143, #131 (⊶ c08ca24c) + ↠ There were [various _snowblock_/_snowflake_ configurations that contained the `archbook` host](https://github.com/search?l=&q=archbook+repo%3Aarcticicestudio%2Figloo+created%3A%3E2018-09-18&type=Code) which doesn't exist anymore and has been replaced in most cases with the new `iceowl` host. In cases where the _snowblock_/_snowflake_ is only targeted for Linux the `archbook` host has been removed to make it independent from the host. They can be updated when a new Linux host might be introduced. + +### GPG — #130 (⊶ 1f3815e7) + +↠ Initially `snwoblocks/gpg` for [GPG][] provided the following files & directories linked to their destination: + +- `gpg.conf` → `~/.gnupg/gpg.conf` + +This includes the [`gpg.conf`][gpg-doc-conf] configuration file and the [`gpg-agent.conf`][gpg-doc-conf-agent] file for the _gpg-agent_. + +### launchd — #133, #131, #58 (⊶ 6cf24792) + +↠ Initially `snwoblocks/launchd` for [launchd][] ([FreeBSD Wiki][freebsd-wiki-launchd]) provided the following files & directories linked to their destination: + +- `com/arcticicestudio/igloo/launchd/igloosync/com.arcticicestudio.igloo.launchd.igloosync-dropbox.plist` → `~/Library/LaunchAgents/com.arcticicestudio.igloo.launchd.igloosync-dropbox.plist` +- `com/arcticicestudio/igloo/launchd/igloosync/igloosync-dropbox.sh` → `~/Library/LaunchAgents/igloosync-dropbox.sh` + +This includes a user agent defining a job to auto-mount the `sync` [gocryptfs][] volume located in the [Dropbox][] folder receiving the password stored in the [macOS Keychain][apple-docs-keychain] via the macOS builtin system CLI tool `security`. +The documentation describes the requirements for the `com.arcticicestudio.igloo.launchd.igloosync` agent. It contains information about dependencies and how to create the required `gocryptfs` password stored- and received via the macOS builtin system CLI tool `security`. + +Note that this is a _macOS_ specific _snowblock_ and therefore the `com.arcticicestudio.igloo.launchd.igloosync-dropbox.plist` agent file is only linked for the currently only _macOS_ host `iceowl`. + +See the knowledge base at [launchd.info][] for more details as well as the available _man_ pages `launchd(1)`, `launchd.plist(5)` and `security(1)`. + +### Docker — #136, #131 (⊶ 0876c2c9) + +↠ Initially `snwoblocks/docker` for [Docker][] provided the following files & directories linked to their destination: + +- `config.iceowl.json` → `~/.docker/config.json` + +This includes `config-.json` configuration files where `` is the name of the target host. The `iceowl` host has the `credsStore` field with the `osxkeychain` value to ensure the _macOS Keychain_ is used to store tokens instead of saving them as plain text into the config file. + +### pip — #141, #131 (⊶ f5d6ff48) + +↠ Initially `snwoblocks/pip` for [pip][] provided the following files & directories linked to their destination: + +- `pip.conf` → `~/.config/pip/pip.conf` +- `requirements.iceowl.txt` → `~/.config/pip/requirements.txt` + +This includes the [`requirements.txt`][pip-docs-requirements] file to track [installed packages][python-docs-install-reqs] and their versions and the [`pip.conf`][pip-docs-config-file] file for user specific configurations. +See the documentation about the [requirements.txt file format][pip-docs-req-file-format] for more details. + +### Firefox — #139 (⊶ 505e3407) + +↠ Initially `snwoblocks/firefox` for [Firefox][] and [Firefox Developer Edition][firefox-dev-edition] provided the following files & directories linked to their destination: + +- `chrome` → `~/.mozilla/firefox/igloo/chrome`, `~/Library/Application Support/Firefox/Profiles/igloo/chrome` +- `containers.json` → `~/.mozilla/firefox/igloo/containers.json`, `~/Library/Application Support/Firefox/Profiles/igloo/containers.json` +- `ignore-dev-edition-profile` → `~/.mozilla/firefox/ignore-dev-edition-profile`, `~/Library/Application Support/Firefox/ignore-dev-edition-profile` +- `profiles.iceowl.ini` → `~/Library/Application Support/Firefox/profiles.ini` +- `profiles.igloo.ini` → `~/.mozilla/firefox/profiles.ini` +- `user.js` → `~/.mozilla/firefox/igloo/user.js`, `~/Library/Application Support/Firefox/igloo/user.js` + +This includes… + +- …the [`user.js`][mozkb-user.js] file to define and persist almost all preferences for a profile. +- …the [`profiles.ini`][mozkb-profiles.ini] file to configure the name and path of the main profile `igloo`. +- …the `ignore-dev-edition-profile` file to fix [Bugzilla bug 1098986][bugzilla-1098986] that causes Firefox Developer Edition to use the internal default profile regardless of whether another customized profile has been set as default. The problem can be fixed by creating the file within the Firefox application data folder. + +- …the `chrome` folder with the [`userChrome.css`][mozkb-userchrome.css] and [`userContent.css`][mozkb-usercontent.css] files to change the Firefox's UI components design and elements within the content. +- …the `containers.json` file of the [Firefox Multi-Account Containers][firefox-addon-multi-acc-cont] to persist the configured containers. +- …the documentation about the setup, tips & tricks and various configurations. + +See [pyllyukko/user.js][pyllyukko/user.js] for another _Firefox_ `user.js` configuration file designed to harden browser settings and make it more secure as well as [ghacks-user.js][] which is an ongoing comprehensive `user.js` template for configuring and hardening Firefox privacy, security and anti-fingerprinting. + +Over the time the `firefox` _snowblock_ evolved through the following changes: + +1. **Disable third-party APIs for more privacy** #153 ⇄ #160 (⊶ e622889b) + ↠ To improve the privacy some more third-party APIs have been disabled: + + - Set `browser.aboutHomeSnippets.updateUrl` to `""` — Disables third-party API requests on new tab page for snippets widget. + - Set `browser.newtabpage.directory.source` to `""` — Also improves the privacy by removing requests against third-party APIs. + +2. **Fixed tabs not rendered in titlebar** #154 ⇄ #161 (⊶ 9c6a97d1) + ↠ The `browser.tabs.drawInTitlebar` key is set to `false` which caused the tabs to being rendered in the titlebar. + +3. **Disabled fullscreen warning popup** #155 ⇄ #162 (⊶ 924d4953) + ↠ The fullscreen warning popup has been disabled by setting the `full-screen-api.warning.timeout` key to `0`. + +4. **Disabled fullscreen warning popup** #156 ⇄ #163 (⊶ c7c1f898) + ↠ Moved the badge of the [test pilot][firefox-testpilot-exp-color] addon [Firefox Color][firefox-color] into the overflow menu. + +5. **Disabled “Find As You Type“** #164 (⊶ e82e8821) + ↠ The [“Find As You Type“][mozkb-accesb-typeaheadfind] feature (UI path: _Preferences_ → _General_ → _Browsing_ → _Search for text when you start typing_) has been disabled. It allows to search the current site as soon as a key is pressed instead of requiring to press Ctrl/ + f. This is a great accessibility improvement, but unfortunately this often collides with page features like hotkeys e.g. when pressing r on [Octobox][] to sync the latest notifications or any other site using such features. + +6. **Always open bookmarks in a new tab in the background** #165 (⊶ 6826f9cb) + ↠ By default, opening a bookmark from the sidebar uses the current active tab. The `browser.tabs.loadBookmarksInTabs` has been set to `true` to always open bookmarks in a new tab in the background. + +7. **Fixed invalid path for Firefox `user.js` file on macOS** #175 (⊶ eb222438) + ↠ The path for the custom Firefox [`user.js` file][mozkb-user.js] file was invalid for macOS hosts. It did not contain the `Profiles` directory causing a symlink to a path where the file won't be read by _Firefox_. + +8. **“light“ as default UI theme** #224 (⊶ a02a48a1) + ↠ The builtin “light“ UI theme is now used by default with the “normal“ density. The theme is provided by the bundled `firefox-compact-light@mozilla.org` extension. + +9. **Disable automatic crash report sending** #217 ⇄ #229 (⊶ 82bee46a) + ↠ To improve the privacy and security the automatic sending of crash reports has been disabled by setting `browser.tabs.crashReporting.sendReport` to `false`. + +10. **"Standard" option for "Enhanced Tracking Protection" browser privacy preferences** #218 ⇄ #230 (⊶ 379c9659) + ↠ The _Standard_ option for the [Enhanced Tracking Protection][mozs-enhc_track_protc] (stats are available at `about:protections`) preference comes with good defaults configuration and is therefore used instead of the _Custom_ option to also prevent sites from breaking due to cookie blocking. + +11. **“Simple Tab Groups“ add-on** #219 ⇄ #231 (⊶ b279caa1) + ↠ The [Simple Tab Groups][firefox-addon-stg] add-on allows to „create, modify, and quickly change tab groups” and is a port of one of the best Firefox extensions that were available before _Firefox Quantum_. + To adapt it the add-on icon has been added to the top bar for quick access and the add-on preferences adjusted. + +12. **Enabled more `about:debugging` options by default** #220 ⇄ #232 (⊶ 3f92ab9f) + ↠ The [`about:debugging` page][mdm-about-debugging] allows to debug processes, tabs and local add-ons. These options are disabled by default and has therefore been enabled in order to extend the ways to debug features. + +13. **Automatic page reload for touch simulation in responsive design mode** #222 ⇄ #234 (⊶ 95655f18) + ↠ When using the [Responsive Design Mode][mdn-tools-resp_design_mode] and the _touch simulation_ gets activated it requires the page to reload in order to work properly. Firefox provides an option to automatically run this task and has now been enabled by default. + +14. **Disable automatic execution pause on script exceptions** #221 ⇄ #233 (⊶ 7e0d3175) + ↠ When the _DevTools_ are opened and an exceptions occurs in any running script, the debugger will be opened and the execution paused. This is kind of annoying for third-party scripts or when the actual goal is not to debug scripts at all and has therefore been disabled. + +15. **Show CSS grid line numbers** #223 ⇄ #235 (⊶ 25e05122) + ↠ To allow to better design and debug [CSS grids][css-tricks-grid_guide] the Firefox _DevTools_ can [visually show the grid line numbers][mdm-inspect-grid#line_num]. This option is disabled by default and has therefore been enabled. + +16. **“Inter“ as base sans-serif typeface** #225 ⇄ #236 (⊶ 8ea0ef06) + ↠ It is currently [required to manually configure the sans-serif typeface based on the running OS](https://github.com/arcticicestudio/igloo/tree/eb222438e6cd93b19c222043570bb7c627ea3e3b/snowblocks/firefox#typeface) due to licensing and the availability of specific font families on different operating systems. Since I use the fantastic [Inter][] typeface family for almost all UI, text and designs it has now also been set as default sans-serif typeface. Inter is open source and therefore system independent and is installed in all of my systems/habitats. + +17. **“Soft“ and USB WebAuthn development options** #226 ⇄ #237 (⊶ 87e6b1d0) + ↠ In order to allow and simplify the development and testing of [WebAuthn][] based apps and websites, the security [options must be set to allow “soft tokens“][webauthn.bin.coffee-ff58]. + Also see the section about [requirements for testing][mozw-sec-webauthn#test_req] of the Mozilla “Security/QA/TestPlans/Web Authentication“ wiki page for more details. + +18. **Disable password generation suggestion for password fields** #227 ⇄ #238 (⊶ d8905100) + ↠ _Firefox_ comes with generally great security features like [Firefox Lockwise][firefox-lockwise], but the [suggestion to generate a new random password when focusing a password field][mozw-toolkit-passman-gen] is kind of annoying and not necessary due to the usage of a password manager that includes a password generator. It has therefore been disabled. + +19. **Enable “legacy“ user profile customizations** #228 ⇄ #239 (⊶ d664ea09) + ↠ [As of Firefox version 69, the `userChrome.css` and `userContent.css` files are not loaded by default anymore][moz-ff-rln-69.0#chrome] in order to improve the performance during browser startup. Also see the documentation about [Firefox breaking changes of `userChrome.css`][userchrome-ff_changes_chrome]. + To achieve the previous behavior, the option to load such “legacy“ files has been enabled again. + +### Jetbrains — #137 (⊶ 2fa3d1d5) + +↠ Initially `snwoblocks/jetbrains` for [JetBrains][] IDEs and products provided the following files & directories linked to their destination: + +- `codestyles/arctic-codestyle.xml` → `~/.IntelliJIdea2018.2/codestyles/arctic-codestyle.xml`, `~/Library/Preferences/IntelliJIdea2018.2/codestyles/arctic-codestyle.xml` +- `inspection/arctic-inspections.xml` → `~/.IntelliJIdea2018.2/inspection/arctic-inspections.xml`, `~/Library/Preferences/IntelliJIdea2018.2/inspection/arctic-inspections.xml` +- `keymaps/arctic-keymap.macos.xml` → `~/.IntelliJIdea2018.2/keymaps/arctic-inspections.xml`, `~/Library/Preferences/IntelliJIdea2018.2/keymaps/arctic-keymap.macos.xml` +- `options/code.style.schemes.xml` → `~/.IntelliJIdea2018.2/options/code.style.schemes.xml`, `~/Library/Preferences/IntelliJIdea2018.2/options/code.style.schemes.xml` +- `options/colors.scheme.xml` → `~/.IntelliJIdea2018.2/options/colors.scheme.xml`, `~/Library/Preferences/IntelliJIdea2018.2/options/colors.scheme.xml` +- `options/customization.xml` → `~/.IntelliJIdea2018.2/options/customization.xml`, `~/Library/Preferences/IntelliJIdea2018.2/options/customization.xml` +- `options/editor.codeinsight.xml` → `~/.IntelliJIdea2018.2/options/editor.codeinsight.xml`, `~/Library/Preferences/IntelliJIdea2018.2/options/editor.codeinsight.xml` +- `options/editor.xml` → `~/.IntelliJIdea2018.2/options/editor.xml`, `~/Library/Preferences/IntelliJIdea2018.2/options/editor.xml` +- `options/ide.general.xml` → `~/.IntelliJIdea2018.2/options/ide.general.xml`, `~/Library/Preferences/IntelliJIdea2018.2/options/ide.general.xml` +- `options/keymap.xml` → `~/.IntelliJIdea2018.2/options/keymap.xml`, `~/Library/Preferences/IntelliJIdea2018.2/options/keymap.xml` +- `options/laf.xml` → `~/.IntelliJIdea2018.2/options/laf.xml`, `~/Library/Preferences/IntelliJIdea2018.2/options/laf.xml` +- `options/options.xml` → `~/.IntelliJIdea2018.2/options/options.xml`, `~/Library/Preferences/IntelliJIdea2018.2/options/options.xml` +- `options/project.default.xml` → `~/.IntelliJIdea2018.2/options/project.default.xml`, `~/Library/Preferences/IntelliJIdea2018.2/options/project.default.xml` +- `options/ui.lnf.xml` → `~/.IntelliJIdea2018.2/options/ui.lnf.xml`, `~/Library/Preferences/IntelliJIdea2018.2/options/ui.lnf.xml` +- `disabled_plugins.txt` → `~/.IntelliJIdea2018.2/disabled_plugins.txt`, `~/Library/Preferences/IntelliJIdea2018.2/disabled_plugins.txt` + +These are important configurations for all used _JetBrains_ IDEs and products which are currently [IntelliJ][] (Ultimate Edition) and [GoLand][]. For details about the paths see the documentation about [directories used by the IDE to store settings, caches, plugins and logs][jb-docs-settings_paths]. + +It includes… + +- …the [code style][jb-docs-code-style] XMl configuration file stored in the `codestyles` folder. +- …the [inspections][jb-docs-inspections] XMl configuration file stored in the `inspections` folder. +- …the [keymaps][jb-docs-keymap] XMl configuration files for Linux and macOS stored in the `keymaps` folder. + See the [keymap reference][jb-docs-keymap_refs] for a visual presentation of the default mappings. +- …the [preferences][jb-docs-prefs] XMl configuration files stored in the `options` folder: + - `code.style.schemes.xml` - settings of the currently used code style. + - `colors.scheme.xml` - settings of the currently used color scheme. + - `customization.xml` and `project.default.xml` - settings of the customized [menus and toolbars][jb-docs-menu_toolbar]. + - `editor.codeinsight.xml` - settings of various automatic code transformations. + - `keymap.xml` - the currently used keymap. + - `laf.xml` and `ui.lnf.yml` - settings of the currently used UI theme. + - all other customized preferences defined in the various categories: `editor.xml`, `ide.general.xml` and `options.xml` +- …the list of [disabled plugins][jb-docs-plugins] stored in the `disabled_plugins.txt` file. + +Since _JetBrains_ uses a naming scheme for user configuration folders based on the product major/minor version it is necessary to update the _snowblock_ as soon as the product gets updated to adapt to the new version string. +Due to this naming scheme for the target path of previous targets should be kept for the `clean` and `link` tasks to ensure these are cleaned up after updating to a new product version. + +Over the time the `jetbrains` _snowblock_ evolved through the following changes: + +1. **IntelliJ 2018.3.5** #182 (⊶ 7e270eb0) + ↠ Before the target version was _IntelliJ 2018.2_ which has been updated to the latest version _IntelliJ 2018.3.5_. This includes new configurations as well as the obligatory adjustment for the correct target paths `~/.IntelliJIdea2018.3` (Linux) and `~/Library/Preferences/IntelliJIdea2018.3` (macOS). + +2. **IntelliJ IDEA 2019.1** #193 (⊶ d5ac5d06) + ↠ Updated the previously used target version _IntelliJ 2018.3_ to the latest version [IntelliJ 2019.1][jb-blog-intellij_2019.1]. This includes the obligatory adjustment for the correct target paths `~/.IntelliJIdea2018.3` (Linux) and `~/Library/Preferences/IntelliJIdea2018.3` (macOS). + Also removed the disabled [CVS][] and [TFS][wiki-tfs] plugins since they are [no longer officially supported and not bundled with IntelliJ IDEA anymore][jb-blog-unbundle_tfs_cvs_plug]. + +3. **No _Go_ package clipboard detection** #194 (⊶ a3d062a5) + ↠ Disabled the detection of _Go_ packages fom the clipbaord, e.g. GitHub URLs, to avoid the noise of notifications/popups that asks to install the package as well as improving privacy during the usage of _JetBrains_ products. There is absolute no need to `go get` since Go 1.11+ is used with [_Go Modules_][go-ghwiki-mods]. + +4. **`goimports` for _Go_ import auto formatting** #195 (⊶ 8a02ae76) + ↠ To improve the formatting and adhere to _Arctic Ice Studio_'s _Go_ code style [`goimports][godoc-x-tools-cmd-goimports] is now used to automatically format imports: + + - Only use one import declaration. + - Use of the `-local` flag to put imports local imports after 3rd-party packages. + - Move all stdlib imports into one group. + - Sort all imports. + +5. **IntelliJ IDEA 2019.2** #211 (⊶ 007a3c8c) + ↠ Updated the previously used target version _IntelliJ 2019.1_ to the latest version [IntelliJ 2019.2][jb-blog-rln-2019.2]. This includes the obligatory adjustment for the correct target paths `~/.IntelliJIdea2019.1` (Linux) and `~/Library/Preferences/IntelliJIdea2019.1` (macOS). + Also see _JetBrains_ [“What's New“][jb-new-2019.2] page for a summary of the largest changes and features. + +6. **Fixed invalid JetBrains symlink target parent paths on Linux hosts** #212 (⊶ 86a06411) + ↠ On macOS the _JetBrains_ configuration files are placed right into the main `IntelliJIdea2019.2` directory while on Linux based systems the folder consists of the sub-folders `cache`, `config` and `system` that can also be configured in the `idea64.properties` file. + Before the target path was also the main `~/.IntellihJIdea2019.2` directory, but files must be linked into the nested `config` folder instead. + +7. **IntelliJ IDEA 2019.3** #216 (⊶ 2623363e) + ↠ Updated the previously used target version _IntelliJ 2019.2_ to the latest version [IntelliJ 2019.3][jb-blog-rln-2019.3]. This includes the obligatory adjustment for the correct target paths `~/.IntelliJIdea2019.2` (Linux) and `~/Library/Preferences/IntelliJIdea2019.2` (macOS). + Also see _JetBrains_ [“What's New“][jb-new-2019.3] page for a summary of the largest changes and features. + +### Visual Studio Code — #179 (⊶ 8cebb084) + +↠ Initially `snowblocks/visual-studio-code` for [Visual Studio Code][vscode] provided the following files & directories linked to their destination: + +- `css` → `~/.vscode/css` +- `workspaces` → `~/.vscode/workspaces` +- `keybindings.json` → `~/.config/Code/User/keybindings.json`, `~/Library/Application Support/Code/User/keybindings.json` +- `locale.json` → `~/.config/Code/User/locale.json`, `~/Library/Application Support/Code/User/locale.json` +- `projects.json` → `~/.vscode/projects.json` +- `settings.json` → `~/.config/Code/User/settings.json`, `~/Library/Application Support/Code/User/settings.json` + +
+ +
+ +#179 documents the migration from [Atom][] to [Visual Studio Code][vscode]. +I've used Atom since it came out some years ago and it has always been a great editor and IDE for web development as well as main editor for documents, but _Visual Studio Code_ evolved a lot during the last year. + +Compared to Atom there are many features and improvements that I've really liked to see for Atom. Even though it can be extended and modified a lot there are limitations due to Atom's core in aspects like performance, stability and overall development features like auto-completion and language-awareness. + +_Visual Studio Code_ feels more “language-native“ when it comes to e.g. intelligent auto-completion, the integration of linters and language specific tools. It comes with support for a lot of languages out-of-the-box™ like _JavaScript_/_TypeScript_, _CSS_/_HTML_ and has basic support for native languages like _Go_ or _Rust_. + +The change was not easy for me since I've customized and developed Atom to fit all of development needs, but after some testing time I had to admit that the UX of _Visual Studio Code_ feels way better now. + +I made sure that all my beloved Atom packages are also available as _Visual Studio Code_ extensions (same code base) or an equivalent alternative before actually started the migration. + +Therefore the initial setup now includes… + +- …core and extension settings. +- …custom keybindings. +- …locale configurations. +- …a list of all installed extensions. +- …CSS stylesheets to customize some that'll be loaded by the [“Custom CSS and JS Loader“][vscode-ext-be5invis.custom-css] extension. +- …workspace files. + +The initial setup comes with the following extensions: + +- [Nord](https://marketplace.visualstudio.com/items?itemName=arcticicestudio.nord-visual-studio-code) +- [file-icons](https://marketplace.visualstudio.com/items?itemName=file-icons.file-icons) +- [Prettier](https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode) +- [ESLint](https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint) +- [Markdown Preview Enhanced](https://marketplace.visualstudio.com/items?itemName=shd101wyy.markdown-preview-enhanced) +- [Babel JavaScript](https://marketplace.visualstudio.com/items?itemName=mgmcdermott.vscode-language-babel) +- [vscode-styled-components](https://marketplace.visualstudio.com/items?itemName=jpoissonnier.vscode-styled-components) +- [Path Intellisense](https://marketplace.visualstudio.com/items?itemName=christian-kohler.path-intellisense) +- [Go](https://marketplace.visualstudio.com/items?itemName=ms-vscode.Go) +- [Docker](https://marketplace.visualstudio.com/items?itemName=PeterJausovec.vscode-docker) +- [YAML](https://marketplace.visualstudio.com/items?itemName=redhat.vscode-yaml) +- [EditorConfig](https://marketplace.visualstudio.com/items?itemName=EditorConfig.EditorConfig) +- [Projects+](https://marketplace.visualstudio.com/items?itemName=fabiospampinato.vscode-projects-plus) +- [Polacode](https://marketplace.visualstudio.com/items?itemName=pnp.polacode) +- [Custom CSS and JS Loader](https://marketplace.visualstudio.com/items?itemName=be5invis.vscode-custom-css) +- [Rust (rls)](https://marketplace.visualstudio.com/items?itemName=rust-lang.rust) +- [GraphQL](https://marketplace.visualstudio.com/items?itemName=Prisma.vscode-graphql) + +Over the time the `visual-studio-code` _snowblock_ evolved through the following changes: + +1. **“Code Spell Checker“ extension** #183 (⊶ 898aa45d) + ↠ The [Code Spell Checker][vscode-ext-code-streetsidesoftware.spell-checker] extension checks for errors and also allows to include user-defined dictionaries. + The initial commit added custom dictionaries with some common words as well as project and identity related words. + +
+ +
+ +2. **_Vim_ script syntax highlighting** #184 (⊶ 2bf7227a) + ↠ Added the [vscode-viml-syntax][vscode-ext-dunstontc.viml] extension for syntax highlighting in all _Vim_ script files. + +3. **“Soft“ word wrap for _Markdown_ and _MDX_ documents** #185 (⊶ 4e990f15) + ↠ Enabled “soft“ word wrapping to improve the readability of long sentences and paragraphs in _Markdown_ and _MDX_ documents. + +4. **File associations for `Brewfile`** ##186 (⊶ 140a7476) + ↠ The [`Brewfile`][homebrew/homebrew-bundle] of [Homebrew][] was not detected as _Ruby_ syntax so a association has therefore been added to map it to the `ruby` syntax type. + +5. **File associations for `vimrc`** #191 (⊶ 330357d6) + ↠ The [`vimrc`][vimdoc-start#rc] of [Vim][] was not detected as _Vim_ script syntax so a association has therefore been added to map it to the `viml` syntax type provided by the [vscode-viml-syntax][vscode-ext-dunstontc.viml] extension that was added in #184. + +6. **_Prettier_ plugin as default formatter** #197 (⊶ b4546935) + ↠ As of _Visual Studio Code_ version 1.33.x a notification is shown when there are multiple formatter found for the file type in the currently active editor. Since [Prettier][] supports most languages and is the de-factor standard tool the [Prettier plugin][vscode-ext-esbenp.prettier-vscode] has been set as editor default. + When there are unsupported languages or languages like _Go_ which come with their own toolchain (`gofmt`, `goimports` etc.) the default formatter can be overridden through the languages-specific settings scopes. + +7. **Reset zoom level back to 1** #198 (⊶ 259537d5) + ↠ The UI window zoom level (`window.zoomLevel`) was set to `0.5` due to some configurations changes made to the global system resolution (4k rendering), but has now been changed back to the default value (`1`). + +8. **_MDX_ extension** #199 (⊶ 9a0ac072) + ↠ Added support for many [MDX][] features, syntax highlighting and bracket matching through the [_MDX_ extension][vscode-ext-silvenon.mdx] by _Matija Marohnić_. + +9. **Switched icon theme** #196 (⊶ f0682871) + ↠ Before the [Material Icon Theme][vscode-ext-equinusocio.vsc-material-theme-icons] by _Mattia Astorino_ was used because it provided slick folder icons with customizeable colors and a large set of file type icons with a flat style and pale/contrast-lowered colors making it a great match to my [Nord][vscode-ext-arcticicestudio.nord] theme. + With the latest update the icons were changed to use bright contrast colors while the folder icons changed in a bad way too. + Therefore I've decided to give the popular [Material Icon Theme][vscode-ext-pkief.material-icon-theme] by _Philipp Kief_ another try (last time it had the same style like the current theme after the latest update and way less customization options). It turned out the theme is more advanced in almost all points and provided a good UX and style: + + - Even larger amount of supported file types. + - Multiple theme style accents. + - **Customizable folder and file icon colors** through the `material-icon-theme.saturation` option to reduce the file color contrast and the `material-icon-theme.folders.color` & `material-icon-theme.folders.theme` options for the folders! + - Arrows of folders can be hidden. + Overall the theme full fills all my requirements and is therefore now used as default theme. + +10. **Hide action buttons of sidebar panel headers** #200 (⊶ f77869b5) + ↠ In #179 the [“Custom CSS and JS Loader“][vscode-ext-be5invis.vscode-custom-css] extension was introduced to use custom CSS stylesheets including styles to hide menu buttons from the editor. + To hide the button of sidebar panel headers another selector has been added. + +11. **Disabled breadcrumb navigation** #209 (⊶ 21f8c343) + ↠ As of _Visual Studio Code_ version 1.35 the [breadcrumb navigation is enabled by default][vscode-rln-1.35#breadcrumbs]. They have been disabled again to unclutter the UI. + +12. **Disabled indent guides in tree widget (Explorer)** #210 (⊶ 5cecacc2) + ↠ As of _Visual Studio Code_ version 1.36 the [tree widget support visual indent guide lines][vscode-rln-1.36#tree_indent_guides] are enabled by default. They have been disabled again to unclutter the UI. + +13. **Render whitespace characters only for selected text** #213 (⊶ d8a81414) + ↠ Updated to the new `selection` value for the `editor.renderWhitespace` field introduced in _Visual Studio Code_ [1.37][vscode-rln-1.37#whitespace_select] that allows to only render whitespace characters on selected text. + +
+ +14. **Hide _NPM Scripts Explorer_** #214 (⊶ 673e844e) + ↠ Previously the builtin _NPM Script Explorer_ was hidden by default, but is visible by default as of _Visual Studio Code_ [1.37][vscode-rln-1.37#npm_script_expl] which was justified by the fact that it was „difficult to discover“. + +
+ +15. **Incremental naming of copied files/folders** #215 (⊶ a5093282) + ↠ As of _Visual Stusio Code_ [1.37][vscode-rln-1.37] the automatic incremental naming for copied files that include numbers has been (silently) removed, but than added back as [_explorer improvement_ in version 1.38][vscode-rln-1.38#explo_impr] with two configuration options to either add a `copy` suffix or use a `smart` strategy. The second one adds a number at the end and if some number is already part of the name, it tries to increase that number. This reflects the behavior from VS Code versions `<1.38` and has therefore been set. + +## _Snowflakes_ + +### systemd — #76 ⇄ #77 (⊶ 1eb5ffc9) + +↠ Created the new [systemd][] _snowflake_ that includes + +- documentations about [how to fix the instantaneous MacBook Pro (11,x) suspend wakeup problem after the lid has been closed][archw-mbp-11x#suspend]. +- documentation about [how to configure the lid close behavior][archw-gnome-lid-behavior]. +- a [custom suspend service][archw-suspend-service] implementation and documentation. +- a [`system-sleep` hook][archw-system-sleep-hook] implementation and documentation. + +See [systemd.special(7)][freedesktop-systemd.special] and [systemd.sleep(8)][freedesktop-systemd.sleep] for more details. + +Over the time the `systemd` _snowflake_ evolved through the following changes: + +1. **Replaced/Updated `archbook` with new `iceowl` host** #143, #131 (⊶ c08ca24c) + ↠ There were [various _snowblock_/_snowflake_ configurations that contained the `archbook` host](https://github.com/search?l=&q=archbook+repo%3Aarcticicestudio%2Figloo+created%3A%3E2018-09-18&type=Code) which doesn't exist anymore and has been replaced in most cases with the new `iceowl` host. In cases where the _snowblock_/_snowflake_ is only targeted for Linux the `archbook` host has been removed to make it independent from the host. They can be updated when a new Linux host might be introduced. + +### buku — #138 (⊶ 38ec12d7) + +↠ Initially `snowflakes/buku` for [buku][] provided the bookmarks of the used database exported as HTML file to allow to simply import it using Firefox as well as shell script that can be used to bootstrap a database. + +The files are `igloocrypt` encrypted because they include sensitive data for private SSH servers as well as jo related bookmarks. + +Over the time the `buku` _snowflake_ evolved through the following changes: + +1. **Bookmarks September 2018** #152 ⇄ #159 (⊶ f021edf0) + ↠ The regular bookmark update for September 2018. + + → Added + + - [React Top-Level API][react-docs-api] - The official docs of the React Top-Level API + - [Modular Scale][modularscale] - A web app to calculate modular font scales + - [Type Scale][type-scale] - Another web app to calculate modular font scales + - [Cypress][cypress] - ast, easy and reliable testing for anything that runs in a browser. + - [Let's Encrypt][letsencrypt] - A free, automated, and open Certificate Authority. + - [Firefox Monitor][firefox-monitor] - Firefox Monitor arms you with tools to keep your personal information safe. Find out what hackers already know about you and learn how to stay a step ahead of them. + - [Have I Been Pwned][haveibeenpwned] - Check if you have an account that has been compromised in a data breach. + - [React Patterns][reactpatterns] - Collection of good React patterns. + - [Hacktoberfest][hacktoberfest] - The yearly open source hackathon by Digital Ocean. + - [BitPaper][bitpaper] - A collaborative whiteboard web app + - [React Lifecycle Methods Diagram][react-lifecycle-methods-diagram] - A web app to visualize the React Lifecycle Methods also mentioned in the official React docs. + - [oEmbed][oembed] - Specification for a format for allowing an embedded representation of a URL on third party sites. + + → Updated + + - [Atomic Design][atomicdesign] by Brad Frost + - Removed the `/table-of-contents` path from the URL + - Added new tags: `css-in-js`, `workflow` + +2. **Bookmarks October 2018** #168 (⊶ dd80df52) + ↠ The regular bookmark update for October 2018. + + → Added + + - [Expo][] - A free and open source toolchain built around React Native to help you build native iOS and Android projects using JavaScript and React. + - [unpkg][] - A fast, global content delivery network for everything on npm to quickly and easily load any file from any package using a URL. + - [My Ocotocat][octocat] - Take a break from your build and create an Octocat that’s all you, from whisker tip to tail. + - [Open Collective][opencollective] - A new form of association, transparent by design. A group of people with a shared mission that operates in full transparency. Everyone can see how they receive or spend money. + - [node.green][] - Node.js ECMAScript compatibility tables. + - [Create React App][create-react-app] - Set up a modern web app by running one command. + - [date-fn][] - Modern JavaScript date utility library that provides the most comprehensive, yet simple and consistent toolset for manipulating JavaScript dates in a browser & Node.js. + - [Centering in CSS: A Complete Guide][css-tricks-centering-css-guide] + +3. **Bookmarks November 2018** #170 (⊶ 4807c565) + ↠ The regular bookmark update for November 2018. + + → Added + + - [web.dev][] — Let's build the future of the web. With actionable guidance and analysis, web.dev helps developers like you learn and apply the web's modern capabilities to your own sites and apps. + - [squoosh.app][] — Squoosh is an image compression web app that allows you to dive into the advanced options provided by various image compressors. + - [Contributor Covenant][contributor-covenant] — A Code of Conduct for Open Source Projects + - [Eva Icons][eva-icons] — Eva Icons is a pack of more than 480 beautifully crafted Open Source icons for common actions and items. + - [Feather Icons][feathericons] — Simply beautiful open source icons + - [CommonMark][] — A strongly defined, highly compatible specification of Markdown + - [Overreacted][] — Personal blog by [Dan Abramov][twitter-dan_abramov], React core team developer. + - [JSON-LD][] — A JSON-based Serialization for Linked Data. JSON-LD organizes and connects it, creating a better Web. + + → Updated + + - [AUR][]: Updated the outdated keyword search URL from `https://aur.archlinux.org?K=%s` to `https://aur.archlinux.org/packages/?O=0&K=%s`. + +### Homebrew — #140, #131 (⊶ 43fd982e) + +↠ Initially `snowflakes/homebrew` for [Homebrew][] added a [`Brewfile`][homebrew/homebrew-bundle] and a documentation that includes instructions how to… + +- …update to the latest Homebrew version. +- …upgrade all outdated formulas, casks and taps. +- …bootstrap the `Brewfile` with [Homebrew Bundle][homebrew/homebrew-bundle]. + +Over the time the `homebrew` _snowflake_ evolved through the following changes: + +1. **“Google Chrome“ cask** #148 (⊶ 2b0286dc) + ↠ The [google-chrome][brew-google-chrome] cask has been added that is used for web development with [DevTools][gdev-web-devtools] features only available in Chrome (e.g. Lighthouse) and to test and compare possible browser differences. + +2. **“Gifski“ (desktop ap) and “ImageOptim“** #149 (⊶ 7508e641) + ↠ The [Gifski][] desktop app has been added for simple and fast conversion as well as the [ImageOptim][homebrew/homebrew-cask-imageoptim] cask and [imageoptim-cli][brew-imageoptim-cli] formula to optimize images. + +
+ + + +
+ +3. **Brewfile Update Januar 2019** #173 (⊶ 60274c38) + ↠ The regular batch update for new, changed and deleted _Homebrew_ formulas/casks/taps. + + → Added + + - [cabextract][] — OSS tool to extract _Microsoft cabinet files_ (`.cab`) + - [nq][] — A UNIX CLI queue utility that allows to create very lightweight job queue systems which require no setup, maintenance, supervision, or any long-running processes. + - [wallpaper][macos-wallpaper] — Allows to manage the desktop wallpaper on macOS from the CLI + - [Spectrum][] — The desktop app of [Spectrum][] + - [Visual Studio Code][vscode] — Code editing. Redefined. Free. Open source. Runs everywhere. + + → Updated + + - [KeepassXC][] — An actively developed community-edition of [KeePassX][] + +4. **`hostess` formula** #174 (⊶ 0e8f37f9) + ↠ Added the formula for [hostess][cbednarski/hostess], an **idempotent** command-line utility for managing your `/etc/hosts` file. + +5. **`gotop` formula** #176 (⊶ 5a449b47) + ↠ Added the formula for [gotop][], a terminal based graphical activity monitor inspired by [gtop][gtop] and [vtop][vtop]. + The formula is available through the `cjbassi/gotop` tap. + +
+ +6. **`dive` formula** #177 (⊶ fed546f5) + ↠ Added the formula for [dive][], a tool for exploring a _Docker_ image, layer contents, and discovering ways to shrink your Docker image size. + The formula is available through the `wagoodman/dive` tap.
+ +7. **`streamlink` formula** #178 (⊶ c8dfabe7) + ↠ Added the formula for [streamlink][], a CLI for extracting streams from various websites to a video player of your choosing by using _FFMPEG_ and _youtube-dl_. + +8. **Remove `dep` formula** #187 (⊶ 6c0a0414) + ↠ Since _Go_ 1.11 with [Go Modules][go-ghwiki-mods] `dep` is deprecated and not necessary anymore. + +9. **Fixed typo in `gnu-which` formula name** #188 (⊶ 9c2d48df) + ↠ Fixed thae typo in the formula name of [`gnu-which`][brew-gnu-which] that is currently stored as `gnu-witch`. + +10. **_Kubernetes_ and _Helm_** #189 (⊶ d8a79830) + ↠ Added [Kubernetes][] and [Helm][]. + +11. **_Protocol Buffers_** #190 (⊶ b3b43e3f) + ↠ Added [Protocol Buffers][protocol-buffers] to develop and build with [gRPC][]. + +### iTerm2 — #135, #131, #70 (⊶ 3573a2a2) + +↠ Initially `snowflakes/iterm2` for [iTerm2][] has been created as replacement for [Tilix][] that is designed for GTK based Linux distributions. The _snowflake_ contains the exported JSON file of the created `igloo` profile. + +### udev — #111 ⇄ #112 (⊶ 8e47b174) + +↠ Initially `snwoflakes/udev` for [udev][archw-udev] a custom rule with mappings for the [Logitech R400 Presenter][logitech-r400-presenter] optimized for presentations made with the React library [Spectacle][] and the [Code Slide][spectacle-code-slide] extension. +The documentation contains detailed information about the functionality as well as install & usage instructions for _udev_ custom rules. + +### Visual Studio Code — #179 (⊶ 8cebb084) + +↠ Initially `snowflakes/visual-studio-code` for [Visual Studio Code][vscode] provided the `extensions.json` file that contains the IDs of all currently used _Visual Studio Code_ extesnions. +See the “_Snowblocks_“ → “Visual Studio Code“ section of this changelog for the release version `0.1.0` for more details. + + + + + + + +[airblade/vim-gitgutter@dc73a81]: https://github.com/airblade/vim-gitgutter/commit/dc73a81 +[airblade/vim-gitgutter#431-c-sigcol]: https://github.com/airblade/vim-gitgutter/issues/431#issuecomment-319696108 +[ap/vim-css-color]: https://github.com/ap/vim-css-color +[apache-license]: http://www.apache.org/licenses/LICENSE-2.0 +[apple-docs-keychain]: https://support.apple.com/guide/keychain-access/welcome/mac +[arch-jb-idea-ce]: https://git.archlinux.org/svntogit/community.git/tree/trunk/idea.desktop?h=packages/intellij-idea-community-edition +[arch-jb-idea-u]: https://aur.archlinux.org/cgit/aur.git/tree/jetbrains-idea.desktop?h=intellij-idea-ultimate-edition +[arch-jb-py-ce]: https://git.archlinux.org/svntogit/community.git/tree/trunk/pycharm.desktop?h=packages/pycharm-community-edition +[archlinux]: https://archlinux.org +[archw-dfile]: https://wiki.archlinux.org/index.php/Desktop_entries +[archw-gnome-keyring]: https://wiki.archlinux.org/index.php/GNOME/Keyring +[archw-gnome-lid-behavior]: https://wiki.archlinux.org/index.php/GNOME#Configure_behaviour_on_lid_switch_close +[archw-mbp-11x#suspend]: https://wiki.archlinux.org/index.php/MacBookPro11,x#Suspend +[archw-plank]: https://wiki.archlinux.org/index.php/Plank +[archw-qt#fail_update]: https://wiki.archlinux.org/index.php/qt#All_Qt5-based_applications_fail_to_run_after_Qt5_update +[archw-ssh_ag]: https://wiki.archlinux.org/index.php/SSH_keys#ssh-agent +[archw-sudo]: https://wiki.archlinux.org/index.php/Sudo#Passing_aliases +[archw-suspend-service]: https://wiki.archlinux.org/index.php/Power_management#Combined_Suspend.2Fresume_service_file +[archw-system-sleep-hook]: https://wiki.archlinux.org/index.php/Power_management#Hooks_in_.2Fusr.2Flib.2Fsystemd.2Fsystem-sleep +[archw-tmux]: https://wiki.archlinux.org/index.php/Tmux +[archw-ud]: https://wiki.archlinux.org/index.php/XDG_user_directories +[archw-udev]: https://wiki.archlinux.org/index.php/udev +[arcticicestudio/nord-vim@9e0249ca]: https://github.com/arcticicestudio/nord-vim/tree/9e0249caa7d122d55a75b790c61db36ab3bdc97d +[arcticicestudio/nord-vim#145]: https://github.com/arcticicestudio/nord-vim/issues/145 +[arcticicestudio/nord-vim#146]: https://github.com/arcticicestudio/nord-vim/pull/146 +[arcticicestudio/styleguide-git]: https://github.com/arcticicestudio/styleguide-git +[atom-blog-1.28]: http://blog.atom.io/2018/06/21/atom-1-28.html#electron-upgrade +[atom-blog-rln-1.28#color_profile]: http://blog.atom.io/2018/06/21/atom-1-28.html#support-for-custom-color-profiles +[atom-docs-custom#cson_conf]: https://flight-manual.atom.io/using-atom/sections/basic-customization/#configuring-with-cson +[atom-docs-custom#home_path_env]: http://flight-manual.atom.io/using-atom/sections/basic-customization/#custom-home-location-with-an-environment-variable +[atom-docs-keymap]: http://flight-manual.atom.io/behind-atom/sections/keymaps-in-depth +[atom-ide]: https://ide.atom.io +[atom-pkg-atom-ide-ui]: https://atom.io/packages/atom-ide-ui +[atom-pkg-ide-typescript]: https://atom.io/packages/ide-typescript +[atom-pkg-language-rust]: https://atom.io/packages/language-rust +[atom-pkg-package-sync]: https://github.com/lee-dohm/package-sync +[atom-pkg-project-folder]: https://github.com/t9md/atom-project-folder +[atom]: https://atom.io +[atom/atom#17356]: https://github.com/atom/atom/issues/17356 +[atomicdesign]: http://atomicdesign.bradfrost.com +[aur-jb-ws]: https://aur.archlinux.org/cgit/aur.git/tree/jetbrains-webstorm.desktop?h=webstorm +[aur-plotinus-git]: https://aur.archlinux.org/packages/plotinus-git +[aur-python-taskw]: https://aur.archlinux.org/packages/python-taskw +[aur]: https://aur.archlinux.org +[auracle]: https://github.com/falconindy/auracle +[bash-docs-alias]: https://www.gnu.org/software/bash/manual/bashref.html#Aliases +[bash]: https://www.gnu.org/software/bash +[bitpaper]: https://bitpaper.io +[brew-bash]: https://formulae.brew.sh/formula/git +[brew-git]: https://formulae.brew.sh/formula/git +[brew-gnu-which]: https://formulae.brew.sh/formula/gnu-which +[brew-google-chrome]: https://github.com/Homebrew/homebrew-cask/blob/master/Casks/google-chrome.rb +[brew-imageoptim-cli]: https://formulae.brew.sh/formula/imageoptim-cli +[bugzilla-1098986]: https://bugzilla.mozilla.org/show_bug.cgi?id=1098986 +[buku-wiki-colors]: https://github.com/jarun/Buku/wiki/Customize-colors +[buku]: https://github.com/jarun/Buku +[cabextract]: https://www.cabextract.org.uk +[cbednarski/hostess]: https://github.com/cbednarski/hostess +[choosealicense-mit]: https://choosealicense.com/licenses/mit +[commonmark]: https://commonmark.org +[contributor-covenant]: https://www.contributor-covenant.org +[cpan-doc-modules]: http://www.cpan.org/modules +[cpanminus]: https://github.com/miyagawa/cpanminus +[create-react-app]: https://facebook.github.io/create-react-app +[css-tricks-centering-css-guide]: https://css-tricks.com/centering-css-complete-guide +[css-tricks-grid_guide]: https://css-tricks.com/snippets/css/complete-guide-grid +[cvs]: http://savannah.nongnu.org/projects/cvs +[cypress]: https://www.cypress.io +[date-fn]: https://date-fns.org +[dconf]: https://wiki.gnome.org/Projects/dconf +[diff-highlight]: https://github.com/git/git/tree/master/contrib/diff-highlight +[diff-so-fancy]: https://github.com/so-fancy/diff-so-fancy +[dive]: https://github.com/wagoodman/dive +[docker]: https://www.docker.com +[dropbox]: https://www.dropbox.com +[eva-icons]: https://akveo.github.io/eva-icons +[expo]: https://expo.io +[fb-code-blog-react_relicense]: https://code.facebook.com/posts/300798627056246/relicensing-react-jest-flow-and-immutable-js +[fd-bookmarks]: https://www.freedesktop.org/wiki/Specifications/desktop-bookmark-spec +[feathericons]: https://feathericons.com +[firefox-addon-multi-acc-cont]: https://addons.mozilla.org/en-US/firefox/addon/multi-account-containers +[firefox-addon-stg]: https://addons.mozilla.org/en-US/firefox/addon/simple-tab-groups +[firefox-color]: https://color.firefox.com +[firefox-dev-edition]: https://www.mozilla.org/en-US/firefox/developer +[firefox-lockwise]: https://www.mozilla.org/firefox/lockwise +[firefox-monitor]: https://monitor.firefox.com +[firefox-testpilot-exp-color]: https://testpilot.firefox.com/experiments/color +[firefox]: https://www.mozilla.org/en-US/firefox +[freebsd-wiki-launchd]: https://wiki.freebsd.org/launchd +[freedesktop-autostart]: https://specifications.freedesktop.org/autostart-spec/autostart-spec-latest.html +[freedesktop-systemd-srv]: https://www.freedesktop.org/software/systemd/man/systemd.service.html +[freedesktop-systemd-unit]: https://www.freedesktop.org/software/systemd/man/systemd.unit.html +[freedesktop-systemd.sleep]: https://www.freedesktop.org/software/systemd/man/sleep.conf.d.html +[freedesktop-systemd.special]: https://www.freedesktop.org/software/systemd/man/systemd.special.html +[freedesktop.org]: https://www.freedesktop.org +[freedesktop]: https://freedesktop.org +[gdev-web-devtools]: https://developers.google.com/web/tools/chrome-devtools +[gh-10]: https://github.com/arcticicestudio/igloo/issues/10 +[gh-131]: https://github.com/arcticicestudio/igloo/issues/131 +[gh-143]: https://github.com/arcticicestudio/igloo/issues/143 +[gh-blog-git-2.13]: https://github.com/blog/2360-git-2-13-has-been-released +[gh-blog-git-2.13#cond_incl]: https://github.com/blog/2360-git-2-13-has-been-released#conditional-configuration +[gh-dotfiles]: https://dotfiles.github.io +[gh-user-svengreb]: https://github.com/svengreb +[gh-user-xulongwu4]: https://github.com/xulongwu4 +[ghacks-user.js]: https://github.com/ghacksuserjs/ghacks-user.js +[ghh-prs#squash]: https://help.github.com/en/articles/about-pull-request-merges#squash-and-merge-your-pull-request-commits +[gifski]: https://sindresorhus.com/gifski +[gist-git_smudge_clean]: https://gist.github.com/g-k/9087422 +[gist-term_colors]: https://gist.github.com/XVilka/8346728 +[git-crypt]: https://github.com/AGWA/git-crypt +[git-docs-conf#autocorr]: https://git-scm.com/book/en/v2/Customizing-Git-Git-Configuration#_code_help_autocorrect_code +[git-docs-config#incl]: https://git-scm.com/docs/git-config#_includes +[git-docs-diff]: https://git-scm.com/docs/git-diff +[git-docs-mergetool]: https://git-scm.com/docs/git-mergetool +[git-docs-revs]: https://git-scm.com/docs/gitrevisions +[git-rln-2.14.0]: https://github.com/git/git/blob/master/Documentation/RelNotes/2.14.0.txt#L213 +[git-rln-2.17.1#cve]: https://github.com/git/git/blob/master/Documentation/RelNotes/2.17.1.txt#L7-L10 +[git]: https://git-scm.com +[gko/vim-coloresque]: https://github.com/gko/vim-coloresque +[gnunn1/tilix#571]: https://github.com/gnunn1/tilix/issues/571 +[go-ghwiki-mods]: https://github.com/golang/go/wiki/Modules +[go]: https://golang.org +[gocryptfs]: https://github.com/rfjakob/gocryptfs +[godoc-x-tools-cmd-goimports]: https://godoc.org/golang.org/x/tools/cmd/goimports +[goland]: https://www.jetbrains.com/go +[gotop]: https://github.com/cjbassi/gotop +[govim]: https://github.com/govim/govim +[gpg-doc-conf-agent]: https://www.gnupg.org/documentation/manuals/gnupg/Agent-Configuration.html#Agent-Configuration +[gpg-doc-conf]: https://www.gnupg.org/documentation/manuals/gnupg/GPG-Configuration.html +[gpg-docs-conf_opts]: https://www.gnupg.org/documentation/manuals/gnupg/GPG-Configuration-Options.html +[gpg]: https://gnupg.org +[gradle-docs-env#opts]: https://docs.gradle.org/current/userguide/gradle_command_line.html#sec:cli_environment_variables +[gradle-docs-rln-3.0#daemon]: https://docs.gradle.org/3.0/release-notes.html#improved-gradle-daemon,-now-enabled-by-default +[gradle]: https://gradle.org +[grpc]: https://grpc.io +[gtop]: https://github.com/aksakalli/gtop +[gulp-cli#compl]: https://github.com/gulpjs/gulp-cli#completion +[gulp]: https://gulpjs.com +[hacktoberfest]: https://hacktoberfest.digitalocean.com +[haveibeenpwned]: https://haveibeenpwned.com +[helm]: https://helm.sh +[homebrew]: https://brew.sh +[homebrew/homebrew-bundle]: https://github.com/Homebrew/homebrew-bundle +[homebrew/homebrew-cask-imageoptim]: https://github.com/Homebrew/homebrew-cask/blob/master/Casks/imageoptim.rb +[htop]: https://hisham.hm/htop +[iina]: https://lhc70000.github.io/iina +[intellij]: https://www.jetbrains.com/idea +[inter]: https://rsms.me/inter +[iterm2]: https://www.iterm2.com +[jb-blog-intellij_2019.1]: https://blog.jetbrains.com/idea/2019/03/intellij-idea-2019-1-is-released-theme-customization-java-12-switch-expressions-debug-inside-docker-containers-and-more +[jb-blog-rln-2019.2]: https://blog.jetbrains.com/idea/2019/07/intellij-idea-2019-2-java-13-preview-features-profiling-tools-services-tool-window-and-more +[jb-blog-rln-2019.3]: https://blog.jetbrains.com/idea/2019/11/intellij-idea-2019-3-better-performance-and-quality +[jb-blog-unbundle_tfs_cvs_plug]: https://blog.jetbrains.com/idea/2019/02/unbundling-tfs-and-cvs-integration-plugins +[jb-docs-code-style]: https://www.jetbrains.com/help/idea/settings-code-style.html +[jb-docs-inspections]: https://www.jetbrains.com/help/idea/inspections-settings.html +[jb-docs-keymap_refs]: https://www.jetbrains.com/help/idea/keymap-reference.html +[jb-docs-keymap]: https://www.jetbrains.com/help/idea/settings-keymap.html +[jb-docs-menu_toolbar]: https://www.jetbrains.com/help/idea/menus-and-toolbars.html +[jb-docs-plugins]: https://www.jetbrains.com/help/idea/managing-plugins.html +[jb-docs-prefs]: https://www.jetbrains.com/help/idea/settings-preferences-dialog.html +[jb-docs-settings_paths]: https://intellij-support.jetbrains.com/hc/en-us/articles/206544519-Directories-used-by-the-IDE-to-store-settings-caches-plugins-and-logs +[jb-new-2019.2]: https://www.jetbrains.com/idea/whatsnew/#v2019-2 +[jb-new-2019.3]: https://www.jetbrains.com/idea/whatsnew/#v2019-3 +[jb-plg-go]: https://plugins.jetbrains.com/plugin/9568-go +[jetbrains]: https://www.jetbrains.com +[json-ld]: https://json-ld.org +[keepassx]: https://www.keepassx.org +[keepassxc]: https://keepassxc.org +[keepassxreboot/keepassxc#1931]: https://github.com/keepassxreboot/keepassxc/issues/1931 +[kubernetes]: https://kubernetes.io +[launchd.info]: http://www.launchd.info +[launchd]: https://developer.apple.com/library/archive/documentation/MacOSX/Conceptual/BPSystemStartup/Chapters/Introduction.html#//apple_ref/doc/uid/10000172i-SW1-SW1 +[letsencrypt]: https://letsencrypt.org +[libfuse-sec]: https://github.com/libfuse/libfuse#security-implications +[libfuse]: https://github.com/libfuse/libfuse +[libfuse/libfuse#15]: https://github.com/libfuse/libfuse/issues/15 +[libsec]: https://wiki.gnome.org/Projects/Libsecret +[livedown]: https://github.com/shime/livedown +[logitech-r400-presenter]: https://www.logitech.com/en-us/product/wireless-presenter-r400 +[macos-wallpaper]: https://github.com/sindresorhus/macos-wallpaper +[mage-docs-env]: https://magefile.org/environment +[mage]: https://magefile.org +[mdm-about-debugging]: https://developer.mozilla.org/en-US/docs/Tools/about:debugging +[mdm-inspect-grid#line_num]: https://developer.mozilla.org/en-US/docs/Tools/Page_Inspector/How_to/Examine_grid_layouts#Display_line_numbers +[mdn-tools-resp_design_mode]: https://developer.mozilla.org/en-US/docs/Tools/Responsive_Design_Mode +[mdx]: https://mdxjs.com +[modularscale]: https://www.modularscale.com +[moz-ff-rln-69.0#chrome]: https://www.mozilla.org/en-US/firefox/69.0/releasenotes/#note-788117 +[mozkb-accesb-typeaheadfind]: http://kb.mozillazine.org/Accessibility.typeaheadfind +[mozkb-profiles.ini]: http://kb.mozillazine.org/Profiles.ini_file +[mozkb-user.js]: http://kb.mozillazine.org/User.js_file +[mozkb-userchrome.css]: http://kb.mozillazine.org/index.php?title=UserChrome.css +[mozkb-usercontent.css]: http://kb.mozillazine.org/index.php?title=UserContent.css +[mozs-enhc_track_protc]: https://support.mozilla.org/en-US/kb/enhanced-tracking-protection-firefox-preview +[mozw-sec-webauthn#test_req]: https://wiki.mozilla.org/Security/QA/TestPlans/Web_Authentication#Requirements_for_testing +[mozw-toolkit-passman-gen]: https://wiki.mozilla.org/Toolkit:Password_Manager/Password_Generation +[mpv-doc-config-dir]: https://mpv.io/manual/master/#options-config-dir +[mpv-doc-config-files]: https://mpv.io/manual/master/#files-~/-config/mpv/mpv-conf +[mpv-doc-config-folder-wl]: https://mpv.io/manual/master/#files-~/-config/mpv/watch-later +[mpv-doc-save-pos]: https://mpv.io/manual/master/#options-save-position-on-quit +[mpv]: https://mpv.io +[mxw/vim-jsx]: https://github.com/mxw/vim-jsx +[nerdcommenter]: https://github.com/scrooloose/nerdcommenter +[node.green]: https://node.green +[nord]: https://www.nordtheme.com +[npm-docs-config]: https://docs.npmjs.com/misc/config +[npm-docs-pkg-lock]: https://docs.npmjs.com/files/package-lock.json +[npm-docs-pkg]: https://docs.npmjs.com/files/package.json +[npm-docs-rc]: https://docs.npmjs.com/files/npmrc +[npm-docs-scripts]: https://docs.npmjs.com/misc/scripts +[npm-livedown]: https://www.npmjs.com/package/livedown +[npm]: https://www.npmjs.com +[nq]: https://github.com/chneukirchen/nq +[nuclide-docs-bp]: https://nuclide.io/docs/features/debugger#breakpoints +[nuclide-docs-db]: https://nuclide.io/docs/features/debugger +[octobox]: https://octobox.io +[octocat]: https://myoctocat.com +[oembed]: https://oembed.com +[opencollective]: https://opencollective.com +[overreacted]: https://overreacted.io +[pacman]: https://www.archlinux.org/pacman +[pangloss/vim-javascript]: https://github.com/pangloss/vim-javascript +[pip-docs-config-file]: https://pip.pypa.io/en/stable/user_guide/#config-file +[pip-docs-req-file-format]: https://pip.pypa.io/en/latest/reference/pip_install/#requirements-file-format +[pip-docs-requirements]: https://pip.pypa.io/en/latest/user_guide/#requirements-files +[pip]: https://pip.pypa.io +[plasticboy/vim-markdown]: https://github.com/plasticboy/vim-markdown +[prettier]: https://prettier.io +[protocol-buffers]: https://developers.google.com/protocol-buffers +[pyllyukko/user.js]: https://github.com/pyllyukko/user.js +[pypi-taskw]: https://pypi.org/project/taskw +[python-docs-install-reqs]: https://packaging.python.org/tutorials/installing-packages/#requirements-files +[react-docs-api]: https://reactjs.org/docs/react-api.html +[react-lifecycle-methods-diagram]: http://projects.wojtekmaj.pl/react-lifecycle-methods-diagram +[react]: https://reactjs.org +[reactpatterns]: https://reactpatterns.com +[rust]: https://www.rust-lang.org +[shime/vim-livedown]: https://github.com/shime/vim-livedown +[snowsaw]: https://github.com/arcticicestudio/snowsaw +[so-fancy/diff-so-fancy#296]: https://github.com/so-fancy/diff-so-fancy/issues/296 +[so-fancy/diff-so-fancy#35-c]: https://github.com/so-fancy/diff-so-fancy/issues/35#issuecomment-196940127 +[so-fancy/diff-so-fancy#35]: https://github.com/so-fancy/diff-so-fancy/issues/35 +[spectacle-code-slide]: http://jamiebuilds.github.io/spectacle-code-slide +[spectacle]: https://formidable.com/open-source/spectacle +[spectrum]: https://spectrum.chat +[squoosh.app]: https://squoosh.app +[streamlink]: https://streamlink.github.io +[systemd]: https://systemd.io +[taskopen]: https://github.com/ValiValpas/taskopen +[taskopen#conf]: https://github.com/ValiValpas/taskopen#configuration +[taskwarrior-doc-alias]: https://taskwarrior.org/docs/terminology.html#alias +[taskwarrior-doc-api-_get]: https://taskwarrior.org/docs/commands/_get.html +[taskwarrior-doc-dom-api]: https://taskwarrior.org/docs/dom.html +[taskwarrior-doc-ids]: https://taskwarrior.org/docs/ids.html +[taskwarrior-docs-conf]: https://taskwarrior.org/docs/introduction.html +[taskwarrior-docs-cx]: https://taskwarrior.org/docs/context.html +[taskwarrior-docs-hooks2]: https://taskwarrior.org/docs/hooks2.html +[taskwarrior-docs-r]: https://taskwarrior.org/docs/report.html +[taskwarrior-docs-tw_int]: https://taskwarrior.org/docs/timewarrior/taskwarrior.html +[taskwarrior-docs-uda]: https://taskwarrior.org/docs/udas.html +[taskwarrior]: https://taskwarrior.org +[tilix]: https://gnunn1.github.io/tilix-web +[timewarrior-docs-conf]: https://taskwarrior.org/docs/timewarrior/configuration.html +[timewarrior-docs-themes]: https://taskwarrior.org/docs/timewarrior/themes.html +[timewarrior-hook-on-modify]: https://github.com/GothenburgBitFactory/timewarrior/blob/dev/ext/on-modify.timewarrior +[timewarrior]: https://taskwarrior.org/docs/timewarrior +[tmux-docs-autodown]: https://github.com/tmux-plugins/tpm/blob/master/docs/automatic_tpm_installation.md +[tmux]: https://tmux.github.io +[tpm]: https://github.com/tmux-plugins/tpm +[trash-cli]: https://github.com/andreafrancia/trash-cli +[twitter-dan_abramov]: https://twitter.com/dan_abramov +[type-scale]: https://type-scale.com +[unpkg]: https://unpkg.com +[userchrome-ff_changes_chrome]: https://www.userchrome.org/firefox-changes-userchrome-css.html +[vim]: https://www.vim.org +[vimdoc-opts#pastetoggle]: http://vimdoc.sourceforge.net/htmldoc/options.html#%27pastetoggle%27 +[vimdoc-start#rc]: http://vimdoc.sourceforge.net/htmldoc/starting.html#vimrc +[vscode-docs-go]: https://code.visualstudio.com/docs/languages/go +[vscode-ext-arcticicestudio.nord]: https://marketplace.visualstudio.com/items?itemName=arcticicestudio.nord-visual-studio-code +[vscode-ext-be5invis.custom-css]: https://marketplace.visualstudio.com/items?itemName=be5invis.vscode-custom-css +[vscode-ext-be5invis.vscode-custom-css]: https://marketplace.visualstudio.com/items?itemName=be5invis.vscode-custom-css +[vscode-ext-code-streetsidesoftware.spell-checker]: https://marketplace.visualstudio.com/items?itemName=streetsidesoftware.code-spell-checker +[vscode-ext-dunstontc.viml]: https://marketplace.visualstudio.com/items?itemName=dunstontc.viml +[vscode-ext-equinusocio.vsc-material-theme-icons]: https://marketplace.visualstudio.com/items?itemName=Equinusocio.vsc-material-theme-icons +[vscode-ext-esbenp.prettier-vscode]: https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode +[vscode-ext-pkief.material-icon-theme]: https://marketplace.visualstudio.com/items?itemName=PKief.material-icon-theme +[vscode-ext-silvenon.mdx]: https://marketplace.visualstudio.com/items?itemName=silvenon.mdx +[vscode-rln-1.35#breadcrumbs]: https://code.visualstudio.com/updates/v1_35#_breadcrumbs-displayed +[vscode-rln-1.36#tree_indent_guides]: https://code.visualstudio.com/updates/v1_36#_tree-indent-guides +[vscode-rln-1.37]: https://code.visualstudio.com/updates/v1_37 +[vscode-rln-1.37#npm_script_expl]: https://code.visualstudio.com/updates/v1_37#_npm-scripts-explorer-visible-by-default +[vscode-rln-1.37#whitespace_select]: https://code.visualstudio.com/updates/v1_37#_show-whitespace-in-selection +[vscode-rln-1.38#explo_impr]: https://code.visualstudio.com/updates/v1_38#_explorer-improvements +[vscode]: https://code.visualstudio.com +[vtop]: https://parall.ax/vtop +[web.dev]: https://web.dev +[webauthn.bin.coffee-ff58]: https://webauthn.bin.coffee/ff58 +[webauthn]: https://webauthn.io +[webpack]: https://webpack.js.org +[wiki-fs_perms]: https://en.wikipedia.org/wiki/File_system_permissions +[wiki-fuse]: https://en.wikipedia.org/wiki/Filesystem_in_Userspace +[wiki-tfs]: https://en.wikipedia.org/wiki/Team_Foundation_Server +[xdg-utils]: https://www.freedesktop.org/wiki/Software/xdg-utils diff --git a/README.md b/README.md index a9c294d..367c83c 100644 --- a/README.md +++ b/README.md @@ -1,18 +1,22 @@ -

+

-

+
-

The snowy dotfile home.

+
-

Powered by

+

The snowy dotfile home.

---- +

Powered by

-Igloo is the snowy [dotfile](http://dotfiles.github.io) home of [Arctic Ice Studio](https://github.com/arcticicestudio) powered by [snowsaw][snowsaw], the lightweight, plugin-driven and simple configurable dotfile bootstrapper. +Igloo is the snowy [dotfile](http://dotfiles.github.io) home of [Arctic Ice Studio][gh-user-arcticicestudio]. +Powered by [snowsaw][], the lightweight, plugin-driven and simple configurable _dotfile_ bootstrapper. ## Getting started + ### Installation + Clone the repository and run the `bootstrap` script: + ```sh git clone --recursive https://github.com/arcticicestudio/igloo cd igloo @@ -20,22 +24,29 @@ cd igloo ``` ## Design Concept -### snowblocks -The design concept is based on topical areas, so-called `snowblocks` which are a named directory that live in the base snowblocks directory and defaults to `/snowblocks`. -Snowblocks are configured via `snowblock.json` files that that will be processed when the base snowblock directory gets scanned recursively, but it is also possible to only process a single `snowblock`. -This design allows a modular structured dotfile repository where each topic can be represented as a `snowblock` instead of placing all files and folders without any logical division in the repository root. +
+ +### _Snowblocks_ + +The design concept is based on topical areas, so-called _snowblocks_ which are a named directory that live in the base `snowblocks` directory and defaults to `/snowblocks`. +_Snowblocks_ are configured via `snowblock.json` files that that will be processed when the base _snowblock_ directory gets scanned recursively, but it is also possible to only process a single _snowblock_. + +This design allows a modular structured _dotfile_ repository where each topic can be represented as a _snowblock_ instead of placing all files and folders without any logical division in the repository root. ## Development + [![](https://img.shields.io/badge/Changelog-0.2.0-blue.svg)](https://github.com/arcticicestudio/nord-vim/blob/v0.2.0/CHANGELOG.md) [![](https://img.shields.io/badge/Workflow-gitflow--branching--model-blue.svg)](http://nvie.com/posts/a-successful-git-branching-model) [![](https://img.shields.io/badge/Versioning-ArcVer_0.8.0-blue.svg)](https://github.com/arcticicestudio/arcver) ### Contribution + Please report issues/bugs, feature requests and suggestions for improvements to the [issue tracker](https://github.com/arcticicestudio/nord-vim/issues). -

+

Copyright © 2016-present Arctic Ice Studio

+[gh-user-arcticicestudio]: https://github.com/arcticicestudio/snowsaw [snowsaw]: https://github.com/arcticicestudio/snowsaw

jH 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�^PfMANw|R_qA{puLC@?$DfcG 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 diff --git a/snowflakes/buku/bootstrap-database.sh.igloocrypt b/snowflakes/buku/bootstrap-database.sh.igloocrypt index 3c74f45e176964fe91c875c9eecb5489325e689d..2df3572f390135b4c6f9cb7a60a84c35a9c42757 100755 GIT binary patch literal 35681 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 literal 33796 zcmV(rK<>W)M@dveQdv+`03Lp$jNz{E&=RfvYs4*r-@XiIsazkK1W%lLM$a6NvYW^R zcASHP+4WIyh!fbhL8fshEK#ZYxD3NB(VLu-^^At~|HoSQ(F1t%`lv`VT82ByM}I0FRCo!0F8XEnQshk8j$G{4C~V#x5wBzOQ?4L`X-M*WVwr_ zZOL2zJr8-kz@9F7k}g7mVKpE&>s`-zTnABPG==I0Y0=D+eywRrL2gr8$532 z*h8yeBL2NMGhLL49X+9geg4OCUhu*ut-0LrshBN22e9wrHy8nD2_lbJzbk`C32oX7 z7Ukh&Fk*gyd6?;UvApXh3B_LRpzQ7M7RmbuZn@jAdeCYGYElTaUam$sNJe4@A!6Tc zhi@@)?u@C|7&A5#zOmR)w>1*(Ai}+O2+@lQIcllcYZy(d6UrBiO<8#5WFO$`vxXMu zof_Q8hvCD};tGhS;owY%2RMH_;0yjePWu$bo}9b#rOW%csJKfz&ui*!89*H*#V3Mt zFf9_HX&l3V`~)Ek@%lTr37fFs|JXee$^9v}c{>JM&S8$`Ky#sddK}1@Q=t%)jFSSW zI@@8WU$Y;EjbYuydv85-Rhg{AUA^Q@@M=Lo(g=&Z|JtxnPD>D4^nb5UssP#tP!pds zXY#P&YB7RBV6G4vu6VUYQmgg-UA?reAJUulWEpo53A-o7TG`hlMg+R+Tibr3m&%FT zgJWX+xFOY2NN<iuITO3-hS63FxX3 ziD4(%!MPbZj2(;r4TyeE+sTJi zlBg1H(%wiO*L}``RE;z$3LVg)sJJ^x|Ko5+y}3fszzASDT_QPt`G{U1@Ym3dr*f(TNxd~HdidLB5n&#Q{pijd6+ zYp)Ie9E4m;qSmO&&=ER!3W9;h6`KpQuELT*I3^B%XK^w9G%a=uWf0e@ivcTYy(--E zIt0~#n1L2u)b9VvH%_l<*4mXrFn`yABSYNn(+pDRnOW>s>YJZW#!<_tmh!Wl+K0 zT;NY3@B4XzQR9wotq73>{*R|_N8pk5#%bKy@$q5y9UYXLq(X&#XUg%Co)4nH>hM z0HVBq)dHxI;aNrXr97!=N4^ zrqFC;RdFE&?7>71Q%i`s0Irb2F6vu3FiG#zlyhAZjTzngx{U0ZK)455@FE^#PRBW5 zba*eHpnMj82aL6CwJ=K2%-p6A6^CNu^13kg*GD~7c>8tX7cZt1Qa$Zi8MG{G?e`sb zpEGO6%(FMxPV1KLVAv%JGdQUrmm@2Zj}Jy2*H20mSVJ211r-0*0c+zVSG}ZFIgsX5 z%pI2nG9gGUW`HyKy2!nO9aC03v>FxJ(~}&)h3B(CKZnIVWOB714`#UtC^t(69yj>6 zVA!J$M3R}f?{<($=$^`FxE&`9iZ@WJ90&xPjPf2((ke_PtsHD7qck*P9MekG#pO_f zo5j^+*1&y~kdG_Z(cf)Ii>x2B831G>!<0+$HDb#Eibs<##F%o3#u@pAu8N=$wpfYL zcU8XnybE@+Y6`)HWjT>-vK+~_kUAEBXpX42;`j(B1Bf?Vj_jV4ti%811JfvQWPq>) zLNKz$Rth2sKExo@#($S4W7o%fK=doF>I-EK$T`H(SHzrfTLG@C>%rnx$TdS0NhFjl)UwoLP)2 z@sxR)x_`p6>)?Ti)%CE*M69+7QBi)#lsns+C&xY|TDZ8-6lzGE#K@ zbXtu1k>V_*L}e9HjHkI~vCWZV=lV~{xK--Ekw)6ptRwT01JJQ@d%IQGPliRyuU<$+ zi+!c7!R>3AF?cu-Jjf&LtEyigF>Lp8T}4oFg#xe(I${P^aK=G$a13=X24w$gELBLx zLPAakz!nhRPK#<~m)EBMbrxCokh*sV5pRtgi zNji)``_O-5O)%0As&#Bj>zSj)pcjD1%hb6Pa{m7gakJ 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 Qz>9J6x$9_K9V;tLaa}CZ7ytkO From e82e882195b8a9fc549eb79cd436edb7baeb5294 Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Sat, 10 Nov 2018 07:13:24 +0100 Subject: [PATCH 149/214] Disable "Find As You Type" MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The "Find As You Type" (1) feature (UI path: Preferences → General → Browsing → "Search for text when you start typing") should be disabled. It allows to search the current site as soon as a key is pressed instead of requiring to press "Ctrl"/"⌘" + "f". This is a great accessibility improvement, but unfortunately this often collides with page features like hotkeys e.g. when pressing "r" on Octobox (2) to sync the latest notifications or any other site using such features. References: (1) http://kb.mozillazine.org/Accessibility.typeaheadfind (2) https://octobox.io Closes GH-164 --- snowblocks/firefox/user.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/snowblocks/firefox/user.js b/snowblocks/firefox/user.js index 6f5009d..d5bc39f 100644 --- a/snowblocks/firefox/user.js +++ b/snowblocks/firefox/user.js @@ -28,7 +28,7 @@ user_pref("accessibility.browsewithcaret", false); * Available within the UI under: * Preferences > General > Browsing */ -user_pref("accessibility.typeaheadfind", true); +user_pref("accessibility.typeaheadfind", false); /* * Improve the performance and unblock e10s by disabling unused accessability features. From 6826f9cb6bdd72a8da3911b8e1db837250d5fcf7 Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Tue, 13 Nov 2018 05:30:15 +0100 Subject: [PATCH 150/214] Always open bookmarks in a new tab in the background By default, opening a bookmark from the sidebar uses the current active tab. The `browser.tabs.loadBookmarksInTabs` has been set tot `true` to to always open bookmarks in a new tab in the background. Closes GH-165 --- snowblocks/firefox/user.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/snowblocks/firefox/user.js b/snowblocks/firefox/user.js index d5bc39f..0b14e5e 100644 --- a/snowblocks/firefox/user.js +++ b/snowblocks/firefox/user.js @@ -209,6 +209,12 @@ user_pref("browser.tabs.drawInTitlebar", true); */ user_pref("browser.tabs.loadBookmarksInBackground", true); +/* + * Always open bookmarks in a new tab in the background. + * By default, opening a bookmark from the sidebar uses the current active tab. + */ +user_pref("browser.tabs.loadBookmarksInTabs", true); + /* * When you open a link in a new tab, switch to it immediately * Available within the UI under: From 360f714070f87e76a9890e0f3c613ba59c56ea1f Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Tue, 13 Nov 2018 05:38:38 +0100 Subject: [PATCH 151/214] Atom IDE - Don't show debugger when setting breakpoints By default, when setting a breakpoint (1) the debugger (2) will be shown automatically. Sometimes this is not be desired goal (e.g. by accidentally setting a breakpoint) and has been disabled. References: (1) https://nuclide.io/docs/features/debugger/#breakpoints (2) https://nuclide.io/docs/features/debugger Closes GH-166 --- snowblocks/atom/config.cson | 2 ++ 1 file changed, 2 insertions(+) diff --git a/snowblocks/atom/config.cson b/snowblocks/atom/config.cson index 01d3ed2..3d625b7 100644 --- a/snowblocks/atom/config.cson +++ b/snowblocks/atom/config.cson @@ -18,6 +18,8 @@ formatOnType: false "atom-ide-datatip": datatipDebounceDelay: 2000 + "atom-ide-debugger": + showDebuggerOnBpSet: false hyperclick: linuxTriggerKeys: "shiftKey,ctrlKey" "atom-material-ui": From b8b1549757bbfc4fb450f87a4dfbab47d55e02e0 Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Tue, 13 Nov 2018 05:49:44 +0100 Subject: [PATCH 152/214] Keymap to move caret to the end/start of the current line MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit To simply move the caret to the end/start of the current line instead of using the `end` and `pos` keys a new mapping should be added for Linux based OS. - Move to the end of the current line: `Ctrl` (super) + `alt` + `→` - Move to the start of the current line: `Ctrl` (super) + `alt` + `←` The default mappings `⌘` + `⌥` + `←` / `→` for macOS are already provided by default. Closes GH-167 --- snowblocks/atom/keymap.cson | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/snowblocks/atom/keymap.cson b/snowblocks/atom/keymap.cson index 0a63bb5..a837be9 100644 --- a/snowblocks/atom/keymap.cson +++ b/snowblocks/atom/keymap.cson @@ -15,5 +15,8 @@ # Simple and fast project management workflow. "ctrl-alt-p": "project-folder:add" -"atom-text-editor": +".platform-linux atom-text-editor": "ctrl-alt-c": "color-picker:open" + # Easy mappings to move the caret to the end/start of the current line instead of using "end" and "pos" keys. + "cmd-alt-right": "editor:move-to-end-of-screen-line" + "cmd-alt-left": "editor:move-to-first-character-of-line" From dd80df52afd4a38365bc2b4b48445f7b901d6751 Mon Sep 17 00:00:00 2001 From: Arctic Ice Studio Date: Tue, 13 Nov 2018 06:19:49 +0100 Subject: [PATCH 153/214] Bookmarks October 2018 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit >>> Added - Expo (1) - A free and open source toolchain built around React Native to help you build native iOS and Android projects using JavaScript and React. - unpkg (2) - A fast, global content delivery network for everything on npm to quickly and easily load any file from any package using a URL. - My Ocotocat (3) - Take a break from your build and create an Octocat that’s all you, from whisker tip to tail. - Open Collective (4) - A new form of association, transparent by design. A group of people with a shared mission that operates in full transparency. Everyone can see how they receive or spend money. - node.green (5) - Node.js ECMAScript compatibility tables. - Create React App (6) - Set up a modern web app by running one command. - date-fn (7) - Modern JavaScript date utility library that provides the most comprehensive, yet simple and consistent toolset for manipulating JavaScript dates in a browser & Node.js. Centering in CSS: A Complete Guide (8) (1) https://expo.io (2) https://unpkg.com (3) https://myoctocat.com (4) https://opencollective.com (5) https://node.green (6) https://facebook.github.io/create-react-app (7) https://date-fns.org (8) https://css-tricks.com/centering-css-complete-guide Closes GH-168 --- snowflakes/buku/bookmarks.html.igloocrypt | Bin 53395 -> 54851 bytes .../buku/bootstrap-database.sh.igloocrypt | Bin 35681 -> 36560 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/snowflakes/buku/bookmarks.html.igloocrypt b/snowflakes/buku/bookmarks.html.igloocrypt index 82377093301711096b8e7a261d053a7b30c306f1..2c94ef12adcd4bf9179e7b756475e36cc20d4a62 100644 GIT binary patch literal 54851 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 Q3Uzu(23tvSQ906(k~QtZU;qFB literal 53395 zcmV(pK=8i+M@dveQdv+`0J%wCk4mJdp{hPZx=vH<&8cS!X47!SC%aJ|0};l-T^tJn zH#7>ZTe&%i{RaEu``m0Ik4pcy?RL_;x*K@BIC*uy3;Rv{ZB^DXsX^O*gkn)k>wr~s z>N&z_?|;HiHEExQlAbC%o(OA}YS3Q+`$+|1NEDBj4)HA+A8pJCaCI-8RQ8B@B>f^C zX5=Nhfe$d7$^#_fA`$4@_%+O6nDWfUu5_hStDm?2NvW&|GJ6jECXfBz>~3A`xUYk{8FW%!BpVrIu; z{=NJ7S6RFA+_hCpbEe-Tv`mbx6Cw=jI&ST}R)~?jXqa0|BA6Y#i{0LFdv|F(S#>`y z@$=EGuz)tSgahx!zNT=UwD#ybfvgrZ{+R05r91Rr^laG6w>8c^WjLuN2J)s)*}pUX zuvFKx^JT*X;*)evbz%h(RkkY#sH-}(jB+bGXpCEPg!~$RT?Fz*g&TC}&51G>U~%17 z6(?;y4ow*aie|^Qn)0;moV371>4h@Ni57r_2T;RJ_2$OM77qTs%!jzXw1HK4S}c|{ zu@JN}AR3QQeyF*nFUIo?6YsKWTKp&#vZT)qwFq=)JjB0c)kntXd2D$+`=i@-*thMUjL+ zp#4F#87Z6RX#i~Og)!$1GPD0-{!m!XECQ`9fdy8a!2u2nlq?I(sN}08X27V=rBq^< z2=jH;XF+!j;FCWhPX@U^H)TBWFoO-MmXVBzhS}&K-0UxdesY7Y^vqLR-%WT@9_&(w z!lv*a%EJ^+xW-2;>L)#N8I{`USh?l+MrV<;+2!`d0r;W492Ugq`8l%VF)>OJv@vznio!X`I)PSdrjb7YUl_S zKBNidYEW_x7Y3XvvGFZpGt4k>X+`JFAUSB~W*WH@gJ8T6A9b?dLr@eZ<-I(Q?hg!5 zFqUmKtTjfod(4{~)RnYkJh=6rfAN-5aidf0GdO+cmXcJ&{R|t)PU8yjZxYa8{R%7) z>+M%y1biro<4_{aI}iFWEXJjqrdm~d**Dz4d+j2@TbPt~_H7r4I&P@fZO3Dr=y+-X z+vPeS0?6Had9)T%zCq)JeRccs1w$W`(xdG%p`c+Pj))rvy+Na`m6uv9)t962AMaYG z*BS6p6#Y{P7c(^AHV*gH4xvUw?a+jPI{R<9JImSHa$K6+l zIhJU1sa4iFFbC#0*q~7;-pbvKbir^QG?nACJeyr~NUQO54TFW;=oy`_ncA}Tw;5_2 z*kDEX%GsM1Nk&+|Zmo9_-CNs3j5$evQq?n6gIBnWf{jr zd1Xj#YJKS)es+;*PBJ$(J}z+Eipv7%_R1$p>oW$|XjK02rJeB`4$v`6G%{@6Eyazc zjIE>lL~kre1G2yusjj(gpjK|mmx?%c4p!Myu%7SJa0~tshmyTvEEz