mirror of
https://github.com/SqrtMinusOne/sqrtminusone.github.io.git
synced 2025-12-11 00:03:02 +03:00
deploy: 5f0178d5ff
This commit is contained in:
parent
21b8b6b6d4
commit
445af72302
6 changed files with 169 additions and 16 deletions
|
|
@ -498,7 +498,8 @@ Emacs is also particularly good at writing Lisp code, e.g. Clojure, Common Lisp,
|
|||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">prodigy</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">slime</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">forge</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">deadgrep</span>)))
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">deadgrep</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">vc-annonate</span>)))
|
||||
</span></span></code></pre></div><h4 id="avy">Avy</h4>
|
||||
<p><a href="https://github.com/abo-abo/avy">Avy</a> is a package that helps navigate Emacs in a tree-like manner.</p>
|
||||
<p>References:</p>
|
||||
|
|
@ -933,18 +934,13 @@ Emacs is also particularly good at writing Lisp code, e.g. Clojure, Common Lisp,
|
|||
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"M"</span> <span style="color:#19177c">'magit-file-dispatch</span>)
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">:config</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq</span> <span style="color:#19177c">magit-blame-styles</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#666">'</span>((<span style="color:#19177c">margin</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">margin-format</span> <span style="color:#666">.</span> (<span style="color:#ba2121">"%a %A %s"</span>))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">margin-width</span> <span style="color:#666">.</span> <span style="color:#666">42</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">margin-face</span> <span style="color:#666">.</span> <span style="color:#19177c">magit-blame-margin</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">margin-body-face</span> <span style="color:#666">.</span> (<span style="color:#19177c">magit-blame-dimmed</span>)))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">headings</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">heading-format</span> <span style="color:#666">.</span> <span style="color:#ba2121">"%-20a %C %s\n"</span>))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">highlight</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">highlight-face</span> <span style="color:#666">.</span> <span style="color:#19177c">magit-blame-highlight</span>))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">lines</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">show-lines</span> <span style="color:#666">.</span> <span style="color:#800">t</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">show-message</span> <span style="color:#666">.</span> <span style="color:#800">t</span>)))))
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#666">'</span>((<span style="color:#19177c">headings</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">heading-format</span> <span style="color:#666">.</span> <span style="color:#ba2121">"%-20a %C %s\n"</span>))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">highlight</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">highlight-face</span> <span style="color:#666">.</span> <span style="color:#19177c">magit-blame-highlight</span>))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">lines</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">show-lines</span> <span style="color:#666">.</span> <span style="color:#800">t</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">show-message</span> <span style="color:#666">.</span> <span style="color:#800">t</span>)))))
|
||||
</span></span></code></pre></div><p><a href="https://github.com/magit/forge">forge</a> provides integration with forges, such as GitHub and GitLab.</p>
|
||||
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(<span style="color:#008000">use-package</span> <span style="color:#19177c">forge</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">:after</span> <span style="color:#19177c">magit</span>
|
||||
|
|
@ -2929,6 +2925,11 @@ Emacs is also particularly good at writing Lisp code, e.g. Clojure, Common Lisp,
|
|||
</span></span></code></pre></div><h4 id="crontab">crontab</h4>
|
||||
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(<span style="color:#008000">use-package</span> <span style="color:#19177c">crontab-mode</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">:straight</span> <span style="color:#800">t</span>)
|
||||
</span></span></code></pre></div><h4 id="nginx">nginx</h4>
|
||||
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(<span style="color:#008000">use-package</span> <span style="color:#19177c">nginx-mode</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">:straight</span> <span style="color:#800">t</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">:config</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">my/set-smartparens-indent</span> <span style="color:#19177c">'nginx-mode</span>))
|
||||
</span></span></code></pre></div><h3 id="shell">Shell</h3>
|
||||
<h4 id="sh">sh</h4>
|
||||
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(<span style="color:#19177c">add-hook</span> <span style="color:#19177c">'sh-mode-hook</span> <span style="color:#00f">#'</span><span style="color:#19177c">smartparens-mode</span>)
|
||||
|
|
@ -6066,6 +6067,7 @@ Emacs is also particularly good at writing Lisp code, e.g. Clojure, Common Lisp,
|
|||
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic">;; (evil-lion-mode -1)</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic">;; (evil-commentary-mode -1)</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic">;; ))</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic">;; <I've just read the line below as "I hate everything"></span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic">;; I have everything I need in polybar</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">emms-mode-line-mode</span> <span style="color:#666">-1</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">emms-playing-time-display-mode</span> <span style="color:#666">-1</span>)
|
||||
|
|
@ -6787,6 +6789,155 @@ Emacs is also particularly good at writing Lisp code, e.g. Clojure, Common Lisp,
|
|||
</span></span><span style="display:flex;"><span> <span style="color:#008000">:action</span> (<span style="color:#008000">lambda</span> (<span style="color:#19177c">elem</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq</span> <span style="color:#19177c">zone-programs</span> (<span style="color:#00f">vector</span> (<span style="color:#00f">cdr</span> <span style="color:#19177c">elem</span>)))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">zone</span>))))
|
||||
</span></span></code></pre></div><h4 id="gource">Gource</h4>
|
||||
<p><a href="https://gource.io/">Gource</a> is a nice repository visualization tool.</p>
|
||||
<p>The goal of the functions below is to run the tool for multiple repos from Dired. Maybe I’ll extract it into a separate package at some point, but I’m fine with letting it live here for now.</p>
|
||||
<h5 id="gravatars">Gravatars</h5>
|
||||
<p>Gource can use pictures to visualize users, so I want to use gravatars. It’s quite amazing that Emacs has a built-in gravatar package.</p>
|
||||
<p>First, retrieve a particular gravatar, with a fallback to identicon if necessary:</p>
|
||||
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(<span style="color:#008000">defun</span> <span style="color:#19177c">my/gravatar-retrieve-sync</span> (<span style="color:#19177c">email</span> <span style="color:#19177c">file-name</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">let</span> ((<span style="color:#19177c">gravatar-default-image</span> <span style="color:#ba2121">"identicon"</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">gravatar-size</span> <span style="color:#800">nil</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">coding-system-for-write</span> <span style="color:#19177c">'binary</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">write-region-annotate-functions</span> <span style="color:#800">nil</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">write-region-post-annotation-function</span> <span style="color:#800">nil</span>))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#00f">write-region</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">image-property</span> (<span style="color:#19177c">gravatar-retrieve-synchronously</span> <span style="color:#19177c">email</span>) <span style="color:#008000">:data</span>)
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#800">nil</span> <span style="color:#19177c">file-name</span> <span style="color:#800">nil</span> <span style="color:#008000">:silent</span>)))
|
||||
</span></span></code></pre></div><p>These images have to be saved to a folder, with the name corresponding to the git username.</p>
|
||||
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(<span style="color:#008000">setq</span> <span style="color:#19177c">my/gravatar-folder</span> <span style="color:#ba2121">"/home/pavel/.cache/gravatars/"</span>)
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>(<span style="color:#008000">defun</span> <span style="color:#19177c">my/gravatar-save</span> (<span style="color:#19177c">email</span> <span style="color:#19177c">author</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">let</span> ((<span style="color:#19177c">file-name</span> (<span style="color:#00f">concat</span> <span style="color:#19177c">my/gravatar-folder</span> <span style="color:#19177c">author</span> <span style="color:#ba2121">".png"</span>)))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">mkdir</span> <span style="color:#19177c">my/gravatar-folder</span> <span style="color:#800">t</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">unless</span> (<span style="color:#00f">file-exists-p</span> <span style="color:#19177c">file-name</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#00f">message</span> <span style="color:#ba2121">"Fetching gravatar for %s (%s)"</span> <span style="color:#19177c">author</span> <span style="color:#19177c">email</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">my/gravatar-retrieve-sync</span> <span style="color:#19177c">email</span> <span style="color:#19177c">file-name</span>))))
|
||||
</span></span></code></pre></div><h5 id="author-names">Author names</h5>
|
||||
<p>That’s a hell of a function…</p>
|
||||
<p>The problem it tries to solve is that, at least in the repos I’m working with, one person can have different commits signed by different emails with the same username, or by same username with different emails. So this function tries to extract and match all such users.</p>
|
||||
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(<span style="color:#008000">defun</span> <span style="color:#19177c">my/git-get-authors</span> (<span style="color:#19177c">repo</span> <span style="color:#008000">&optional</span> <span style="color:#19177c">authors-init</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">let*</span> ((<span style="color:#19177c">default-directory</span> <span style="color:#19177c">repo</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">data</span> (<span style="color:#19177c">shell-command-to-string</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"git log --pretty=format:\"%ae|%an\" | sort | uniq -c | sed \"s/^[ \t]*//;s/ /|/\""</span>))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">authors</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">cl-loop</span> <span style="color:#19177c">for</span> <span style="color:#00f">string</span> <span style="color:#19177c">in</span> (<span style="color:#19177c">split-string</span> <span style="color:#19177c">data</span> <span style="color:#ba2121">"\n"</span>)
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">if</span> (<span style="color:#00f">=</span> (<span style="color:#00f">length</span> (<span style="color:#19177c">split-string</span> <span style="color:#00f">string</span> <span style="color:#ba2121">"|"</span>)) <span style="color:#666">3</span>)
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">collect</span> (<span style="color:#008000">let</span> ((<span style="color:#19177c">datum</span> (<span style="color:#19177c">split-string</span> <span style="color:#00f">string</span> <span style="color:#ba2121">"|"</span>)))
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#666">`</span>((<span style="color:#19177c">count</span> <span style="color:#666">.</span> <span style="color:#666">,</span>(<span style="color:#00f">string-to-number</span> (<span style="color:#00f">nth</span> <span style="color:#666">0</span> <span style="color:#19177c">datum</span>)))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">email</span> <span style="color:#666">.</span> <span style="color:#666">,</span>(<span style="color:#00f">downcase</span> (<span style="color:#00f">nth</span> <span style="color:#666">1</span> <span style="color:#19177c">datum</span>)))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">author</span> <span style="color:#666">.</span> <span style="color:#666">,</span>(<span style="color:#00f">nth</span> <span style="color:#666">2</span> <span style="color:#19177c">datum</span>)))))))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#00f">mapcar</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">lambda</span> (<span style="color:#19177c">datum</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setf</span> (<span style="color:#19177c">alist-get</span> <span style="color:#19177c">'author</span> <span style="color:#19177c">datum</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#00f">car</span> (<span style="color:#19177c">cl-reduce</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">lambda</span> (<span style="color:#19177c">acc</span> <span style="color:#19177c">author</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">if</span> (<span style="color:#00f">></span> (<span style="color:#00f">cdr</span> <span style="color:#19177c">author</span>) (<span style="color:#00f">cdr</span> <span style="color:#19177c">acc</span>))
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">author</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">acc</span>))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">alist-get</span> <span style="color:#19177c">'authors</span> <span style="color:#19177c">datum</span>)
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">:initial-value</span> <span style="color:#666">'</span>(<span style="color:#800">nil</span> <span style="color:#666">.</span> <span style="color:#666">-1</span>))))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setf</span> (<span style="color:#19177c">alist-get</span> <span style="color:#19177c">'email</span> <span style="color:#19177c">datum</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#00f">car</span> (<span style="color:#19177c">cl-reduce</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">lambda</span> (<span style="color:#19177c">acc</span> <span style="color:#19177c">email</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">if</span> (<span style="color:#00f">></span> (<span style="color:#00f">cdr</span> <span style="color:#19177c">email</span>) (<span style="color:#00f">cdr</span> <span style="color:#19177c">acc</span>))
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">email</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">acc</span>))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">alist-get</span> <span style="color:#19177c">'emails</span> <span style="color:#19177c">datum</span>)
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">:initial-value</span> <span style="color:#666">'</span>(<span style="color:#800">nil</span> <span style="color:#666">.</span> <span style="color:#666">-1</span>))))
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">datum</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">cl-reduce</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">lambda</span> (<span style="color:#19177c">acc</span> <span style="color:#19177c">val</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">let*</span> ((<span style="color:#19177c">author</span> (<span style="color:#19177c">alist-get</span> <span style="color:#19177c">'author</span> <span style="color:#19177c">val</span>))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">email</span> (<span style="color:#19177c">alist-get</span> <span style="color:#19177c">'email</span> <span style="color:#19177c">val</span>))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">count</span> (<span style="color:#19177c">alist-get</span> <span style="color:#19177c">'count</span> <span style="color:#19177c">val</span>))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">saved-value</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">seq-find</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">lambda</span> (<span style="color:#19177c">cand</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">or</span> (<span style="color:#19177c">alist-get</span> <span style="color:#19177c">email</span> (<span style="color:#19177c">alist-get</span> <span style="color:#19177c">'emails</span> <span style="color:#19177c">cand</span>)
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#800">nil</span> <span style="color:#800">nil</span> <span style="color:#00f">#'string-equal</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">alist-get</span> <span style="color:#19177c">author</span> (<span style="color:#19177c">alist-get</span> <span style="color:#19177c">'authors</span> <span style="color:#19177c">cand</span>)
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#800">nil</span> <span style="color:#800">nil</span> <span style="color:#00f">#'string-equal</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">alist-get</span> <span style="color:#19177c">email</span> (<span style="color:#19177c">alist-get</span> <span style="color:#19177c">'authors</span> <span style="color:#19177c">cand</span>)
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#800">nil</span> <span style="color:#800">nil</span> <span style="color:#00f">#'string-equal</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">alist-get</span> <span style="color:#19177c">author</span> (<span style="color:#19177c">alist-get</span> <span style="color:#19177c">'emails</span> <span style="color:#19177c">cand</span>)
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#800">nil</span> <span style="color:#800">nil</span> <span style="color:#00f">#'string-equal</span>)))
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">acc</span>)))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">if</span> <span style="color:#19177c">saved-value</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">progn</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">if</span> (<span style="color:#19177c">alist-get</span> <span style="color:#19177c">email</span> (<span style="color:#19177c">alist-get</span> <span style="color:#19177c">'emails</span> <span style="color:#19177c">saved-value</span>)
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#800">nil</span> <span style="color:#800">nil</span> <span style="color:#00f">#'string-equal</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">cl-incf</span> (<span style="color:#19177c">alist-get</span> <span style="color:#19177c">email</span> (<span style="color:#19177c">alist-get</span> <span style="color:#19177c">'emails</span> <span style="color:#19177c">saved-value</span>)
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#800">nil</span> <span style="color:#800">nil</span> <span style="color:#00f">#'string-equal</span>)
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">count</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">push</span> (<span style="color:#00f">cons</span> <span style="color:#19177c">email</span> <span style="color:#19177c">count</span>) (<span style="color:#19177c">alist-get</span> <span style="color:#19177c">'emails</span> <span style="color:#19177c">saved-value</span>)))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">if</span> (<span style="color:#19177c">alist-get</span> <span style="color:#19177c">author</span> (<span style="color:#19177c">alist-get</span> <span style="color:#19177c">'authors</span> <span style="color:#19177c">saved-value</span>)
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#800">nil</span> <span style="color:#800">nil</span> <span style="color:#00f">#'string-equal</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">cl-incf</span> (<span style="color:#19177c">alist-get</span> <span style="color:#19177c">author</span> (<span style="color:#19177c">alist-get</span> <span style="color:#19177c">'authors</span> <span style="color:#19177c">saved-value</span>)
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#800">nil</span> <span style="color:#800">nil</span> <span style="color:#00f">#'string-equal</span>)
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">count</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">push</span> (<span style="color:#00f">cons</span> <span style="color:#19177c">author</span> <span style="color:#19177c">count</span>) (<span style="color:#19177c">alist-get</span> <span style="color:#19177c">'authors</span> <span style="color:#19177c">saved-value</span>))))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq</span> <span style="color:#19177c">saved-value</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">push</span> <span style="color:#666">`</span>((<span style="color:#19177c">emails</span> <span style="color:#666">.</span> ((<span style="color:#666">,</span><span style="color:#19177c">email</span> <span style="color:#666">.</span> <span style="color:#666">,</span><span style="color:#19177c">count</span>)))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">authors</span> <span style="color:#666">.</span> ((<span style="color:#666">,</span><span style="color:#19177c">author</span> <span style="color:#666">.</span> <span style="color:#666">,</span><span style="color:#19177c">count</span>))))
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">acc</span>)))
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">acc</span>))
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">authors</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">:initial-value</span> <span style="color:#19177c">authors-init</span>))))
|
||||
</span></span></code></pre></div><h5 id="get-gource-log">Get Gource Log</h5>
|
||||
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(<span style="color:#008000">defun</span> <span style="color:#19177c">my/gource-prepare-log</span> (<span style="color:#19177c">repo</span> <span style="color:#19177c">authors</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">let</span> ((<span style="color:#00f">log</span> (<span style="color:#19177c">shell-command-to-string</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#00f">concat</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"gource --output-custom-log - "</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">repo</span>)))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">authors-mapping</span> (<span style="color:#00f">make-hash-table</span> <span style="color:#008000">:test</span> <span style="color:#00f">#'equal</span>))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">prefix</span> (<span style="color:#19177c">file-name-base</span> <span style="color:#19177c">repo</span>)))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">cl-loop</span> <span style="color:#19177c">for</span> <span style="color:#19177c">author-datum</span> <span style="color:#19177c">in</span> <span style="color:#19177c">authors</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">for</span> <span style="color:#19177c">author</span> <span style="color:#00f">=</span> (<span style="color:#19177c">alist-get</span> <span style="color:#19177c">'author</span> <span style="color:#19177c">author-datum</span>)
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">do</span> (<span style="color:#19177c">my/gravatar-save</span> (<span style="color:#19177c">alist-get</span> <span style="color:#19177c">'email</span> <span style="color:#19177c">author-datum</span>) <span style="color:#19177c">author</span>)
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">do</span> (<span style="color:#008000">cl-loop</span> <span style="color:#19177c">for</span> <span style="color:#19177c">other-author</span> <span style="color:#19177c">in</span> (<span style="color:#19177c">alist-get</span> <span style="color:#19177c">'authors</span> <span style="color:#19177c">author-datum</span>)
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">unless</span> (<span style="color:#00f">string-equal</span> (<span style="color:#00f">car</span> <span style="color:#19177c">other-author</span>) <span style="color:#19177c">author</span>)
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">do</span> (<span style="color:#00f">puthash</span> (<span style="color:#00f">car</span> <span style="color:#19177c">other-author</span>) <span style="color:#19177c">author</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">authors-mapping</span>)))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">cl-loop</span> <span style="color:#19177c">for</span> <span style="color:#19177c">line</span> <span style="color:#19177c">in</span> (<span style="color:#19177c">split-string</span> <span style="color:#00f">log</span> <span style="color:#ba2121">"\n"</span>)
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#00f">concat</span> (<span style="color:#008000">let</span> ((<span style="color:#19177c">fragments</span> (<span style="color:#19177c">split-string</span> <span style="color:#19177c">line</span> <span style="color:#ba2121">"|"</span>)))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">when</span> (<span style="color:#00f">></span> (<span style="color:#00f">length</span> <span style="color:#19177c">fragments</span>) <span style="color:#666">3</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">when-let</span> (<span style="color:#19177c">mapped-author</span> (<span style="color:#00f">gethash</span> (<span style="color:#00f">nth</span> <span style="color:#666">1</span> <span style="color:#19177c">fragments</span>)
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">authors-mapping</span>))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setf</span> (<span style="color:#00f">nth</span> <span style="color:#666">1</span> <span style="color:#19177c">fragments</span>) <span style="color:#19177c">mapped-author</span>))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setf</span> (<span style="color:#00f">nth</span> <span style="color:#666">3</span> <span style="color:#19177c">fragments</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#00f">concat</span> <span style="color:#ba2121">"/"</span> <span style="color:#19177c">prefix</span> (<span style="color:#00f">nth</span> <span style="color:#666">3</span> <span style="color:#19177c">fragments</span>))))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">string-join</span> <span style="color:#19177c">fragments</span> <span style="color:#ba2121">"|"</span>))
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#00f">concat</span> <span style="color:#ba2121">"\n"</span>)))
|
||||
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(<span style="color:#008000">defun</span> <span style="color:#19177c">my/gource-dired-create-logs</span> (<span style="color:#19177c">repos</span> <span style="color:#19177c">log-name</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">interactive</span> (<span style="color:#00f">list</span> (<span style="color:#008000">or</span> (<span style="color:#19177c">dired-get-marked-files</span> <span style="color:#800">nil</span> <span style="color:#800">nil</span> <span style="color:#00f">#'file-directory-p</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#d2413a;font-weight:bold">user-error</span> <span style="color:#ba2121">"Select at least one directory"</span>))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">read-file-name</span> <span style="color:#ba2121">"Log file name: "</span> <span style="color:#800">nil</span> <span style="color:#ba2121">"combined.log"</span>)))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">let*</span> ((<span style="color:#19177c">authors</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">cl-reduce</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">lambda</span> (<span style="color:#19177c">acc</span> <span style="color:#19177c">repo</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">my/git-get-authors</span> <span style="color:#19177c">repo</span> <span style="color:#19177c">acc</span>))
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">repos</span>
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#008000">:initial-value</span> <span style="color:#800">nil</span>))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">logs</span> (<span style="color:#19177c">string-join</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">seq-filter</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">lambda</span> (<span style="color:#19177c">line</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">not</span> (<span style="color:#19177c">string-empty-p</span> <span style="color:#19177c">line</span>)))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">seq-sort-by</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">lambda</span> (<span style="color:#19177c">line</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">if-let</span> (<span style="color:#19177c">time</span> (<span style="color:#00f">car</span> (<span style="color:#19177c">split-string</span> <span style="color:#19177c">line</span> <span style="color:#ba2121">"|"</span>)))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#00f">string-to-number</span> <span style="color:#19177c">time</span>)
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#666">0</span>))
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#00f">#'<</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">split-string</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#00f">mapconcat</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">lambda</span> (<span style="color:#19177c">repo</span>)
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">my/gource-prepare-log</span> <span style="color:#19177c">repo</span> <span style="color:#19177c">authors</span>))
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#19177c">repos</span> <span style="color:#ba2121">"\n"</span>)
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"\n"</span>)))
|
||||
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"\n"</span>)))
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#008000">with-temp-file</span> <span style="color:#19177c">log-name</span>
|
||||
</span></span><span style="display:flex;"><span> (<span style="color:#00f">insert</span> <span style="color:#19177c">logs</span>))))
|
||||
</span></span></code></pre></div><h2 id="guix-settings">Guix settings</h2>
|
||||
<table>
|
||||
<thead>
|
||||
|
|
@ -7019,6 +7170,7 @@ Emacs is also particularly good at writing Lisp code, e.g. Clojure, Common Lisp,
|
|||
<li><a href="#docker">Docker</a></li>
|
||||
<li><a href="#jenkins">Jenkins</a></li>
|
||||
<li><a href="#crontab">crontab</a></li>
|
||||
<li><a href="#nginx">nginx</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#shell">Shell</a>
|
||||
|
|
@ -7209,6 +7361,7 @@ Emacs is also particularly good at writing Lisp code, e.g. Clojure, Common Lisp,
|
|||
<li><a href="#power-mode">Power mode</a></li>
|
||||
<li><a href="#redacted">Redacted</a></li>
|
||||
<li><a href="#zone">Zone</a></li>
|
||||
<li><a href="#gource">Gource</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
|
|
|||
|
|
@ -561,7 +561,7 @@
|
|||
</li>
|
||||
<li>
|
||||
<p>Manually fix <code>etc/resolv.conf</code> to prevent DNS leaks</p>
|
||||
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-sh" data-lang="sh"><span style="display:flex;"><span>cp /etc/resolv.conf /etc/resolv.conf-bak
|
||||
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-sh" data-lang="sh"><span style="display:flex;"><span>/home/pavel/.guix-extra-profiles/console/console/bin/cp /etc/resolv.conf /etc/resolv.conf-bak
|
||||
</span></span><span style="display:flex;"><span><span style="color:#008000">echo</span> <span style="color:#ba2121">"nameserver 8.8.8.8"</span> > /etc/resolv.conf
|
||||
</span></span></code></pre></div><p>Restore <code>resolv.conf</code></p>
|
||||
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-sh" data-lang="sh"><span style="display:flex;"><span>resolveconf -u
|
||||
|
|
@ -606,7 +606,7 @@
|
|||
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic"># pkexec nmcli con modify "$CONN" ipv6.method ignore</span>
|
||||
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic"># nmcli connection up "$CONN"</span>
|
||||
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic"># fi</span>
|
||||
</span></span><span style="display:flex;"><span>pkexec openvpn --config ~/.vpn/mullvad_openvpn_linux_lv_rix/mullvad_lv_rix.conf
|
||||
</span></span><span style="display:flex;"><span>pkexec openvpn --config ~/.vpn/mullvad_openvpn_linux_fi_hel/mullvad_fi_hel.conf
|
||||
</span></span></code></pre></div><h4 id="377cab"><del>vpn-stop</del></h4>
|
||||
<p><del>Also a script to reverse the changes</del>
|
||||
Also not necessary now. Just <code>herd stop vpn</code> and <code>sudo pkill vpn</code>.</p>
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang=""><head>
|
||||
<meta name="generator" content="Hugo 0.107.0">
|
||||
<meta name="generator" content="Hugo 0.109.0">
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||||
|
||||
|
|
|
|||
BIN
stats/all.png
BIN
stats/all.png
Binary file not shown.
|
Before Width: | Height: | Size: 117 KiB After Width: | Height: | Size: 116 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 64 KiB After Width: | Height: | Size: 64 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 68 KiB After Width: | Height: | Size: 67 KiB |
Loading…
Add table
Reference in a new issue