In the middle of the desert you can say anything you want
I’ll memorize the g/...
syntax someday.
:g!/pattern/d
I can just look for the pattern as usual with /pattern
and tweak it live, then do
:g!//d
and it will atke the last used pattern.
I should try doing something more interesting with the passata di pomodoro!
Options:
In general all seem to require both tomato puree and chopped tomatoes; and olive oil + garlic + oregano/basil + (brown) sugar seems to cover 90% of cases.
die Kaffeesatzleserei - reading in coffee beans (heard at work)
I shouldn’t forget that screen -R screenname
can be replaced by screen -R s
if it’s the only screen with such a name. Not sure if better or worse than tab completion, likely worse because it’s surprising, but quite nice to use.
i3-msg exit
1 does the magic.
ipset -N myset nethash # create myset
ipset add myset 27.8.0.0/13
iptables -I INPUT -m set --match-set myset src -j DROP # create temporary iptables thing
# making it persistent
ipset save > /etc/ipset.conf
# then enable ipset services
# Listing stuff
ipset -L
# Deleting set
ipset destroy myset
If you can’t destroy an ipset set because it’s being used by kernel:
iptables -L --line-numbers
returns this:
Chain INPUT (policy DROP)
num target prot opt source destination
1 DROP all -- anywhere anywhere match-set myset src
...
Then to delete number 1:
iptables -D INPUT 1
GitHub - mkorthof/ipset-country: Block countries using iptables + ipset + ipdeny.com can do both a whitelist and a blacklist.
Article with a very interesting graph: Becoming a Data Scientist - Curriculum via Metromap – Pragmatic Perspectives
{:height=“500px”}
der Tonus - heard at work in context of
Option to return objects as a list of objects (separated by a comma) · Issue #124 · stedolan/jq:
TL;DR use jq "[foo]"
instead of jq "foo"
.
yunohost app info -f appname
returns the A LOT of info about the appname, including installation paths.
… can be located in ~/.config/qutebrowser/userscripts
, not just in ~/.local ..
! When tried to run one it didn’t find it helpfully outputted all the paths it looks for them - which is great and I’ll steal this. If a file is not found you know the person will probably need this, especially if they are many.
One of the cooler solutions I’ve seen: Managing dotfiles with GNU stow - Alex Pearce (There seems to be a canonical page1 I found first, but I like the other one more)
TL;DR create a directory for the dotfiles, with each folder containing dotfiles mirroring the usual dotfiles’ locations in the system; Then from inside the main dotfiles directory do stow vim bash whatever
and it’ll magically put it in the right place in the home directory.
This works because
Stow assumes that the contents of the
you specify should live one directory above where the stow command is run, so having our .dotfiles directory at ~/.dotfiles means using stow to manage our dotfiles just works. 2
This is awesome because:
The same article2’s sample github repo: dotfiles/neovim at master · alexpearce/dotfiles
The stow linked github repo’s dotfiles are actually fascinating: alexpearce/dotfiles: My dotfiles.
dotfiles/.gitconfig at master · alexpearce/dotfiles:
# Clone git repos with URLs like "gh:alexpearce/dotfiles"
[url "https://github.com/"]
insteadOf = "gh:"
[url "git@github.com:"]
pushInsteadOf = "gh:"
# Clone CERN GitLab repos with URLs like "gl:lhcb/Hlt"
[url "ssh://git@gitlab.cern.ch:7999/"]
insteadOf = "gl:"
Applying the above to my own configs in ~/.gitconfig
.
Assuming the ssh port is 1234 ~/.gitconfig
is like
[url "ssh://git@myserver:1234/"]
insteadOf = "gh:"
and then in the per-repo settings something similar to
[remote "bitbucket"]
url = gh:myusername/myproject.git
Cloning it is now easy:
git clone gh:myusername/myproject
Neat!
List of supported languages and lexers · rouge-ruby/rouge Wiki
Quite a lot! Will try the generic conf
for the .gitconfig
above.
Brandon Invergo - Using GNU Stow to manage your dotfiles. ↩︎
Even better description than the canonical page: Managing dotfiles with GNU stow - Alex Pearce ↩︎ ↩︎
I’m very impressed by it! Makes everything really easy, I remember the last time I had to install stuff manually. After 48h 9/10, some things surprised me (removing root ssh access…) but they were always mentioned in the relevant docu I hadn’t read.
Official docu is quite okay, but rarely appeared when I was googling my problems. My instinct is to Google the problem instantly - sometimes they should actually be to find and check any existing official documentation/README first, then google. (An even better instinct would be to skim any official documentation before starting, as religiously as I do it for unknown real-life 3D things.)
This took me too long to find, has info about correct DNS records: DNS and subdomains for the applications | Yunohost Documentation
By trial and error the complete process is:
@ A XYZ.XYZ.XYZ.XYZ
@ AAAA 1234:1234:1234:FFAA:FFAA:FFAA:FFAA:AAFF
* CNAME mydomain.com.
agenda CNAME mydomain.com.
blog CNAME mydomain.com.
rss CNAME mydomain.com.
subdomain.my.domain
) as it if were newI kept messing up NAME and DATA of the CNAME records because I was following more the other ones Yunohost created, a row of
Name: xmpp-upload.my.domain
Data: @
For subdomainname.my.domain I needed this (kinda-sorta-reversed from the above; as usual, dots are significant):
Name: my.domain.
Data: subdomainname
cfonts is like figlet, but with many more settings (colors and alignment blew my mind!)! Link has a lot of colorful examples. I might get a nice colorful motd and/or banner soon. :)
There’s a command for that: hostnamectl set-hostname new-hostname
~/.local/bin
I like the idea of having ~/.local/bin
in my $PATH
, and putting there symbolic links (ln -s TARGET LINK
) to my usual folder where I have programs/executables. I’d even have a separate thing in $PATH
for shell scripts and binaries, which will get rid of so many stupid CLI aliases I have whose function is to point to a single executable with a long path.
TODO - look at my aliases and commands I run often and see how many of them can I symlink
~/.timewarrior/
and similar foldersHad always problems with umlauts etc, looked at the source, changed #!/usr/bin/env python
to #!/usr/bin/env python3
- now it works! Wanted to do a pull request, but it’s fixed on github master1, the apt repo has an older version as it often does.
.. As expected. git clone git@what:ever outputdirectory
. git clone git@what:ever .
works.
New domain, yay! I’ll slowly move stuff there, starting with this diensttagebuch.
.git/config
I wanted to set up two remotes, so that the dtb deploy.sh
script after building the html & rsync-ing would push it to both the github dtb repo and my own.
Followed this basically (except that I had deleted origin
by error in the process, so recreated it back again and added both remotes to it so I’ll still be able to do git push origin master
): How to push to multiple git remotes at once. Useful if you keep mirrors of your repo..
Mostly copying from there, changing/sanitizing some of my configs:
# Assume the git repost are set up like this
git remote add github git@github.com:muccg/my-project.git #this is the one "origin" pointed to to
git remote add bb git@bitbucket.org:ccgmurdoch/my-project.git
# Add to origin two remote urls for push
git remote set-url --add --push origin git@github.com:muccg/my-project.git
git remote set-url --add --push origin git@bitbucket.org:ccgmurdoch/my-project.git
# Look at the result
git remote show origin
which outputs this:
> git remote show origin
* remote origin
Fetch URL: git@github.com:pchr8/my-project.git
Push URL: git@bitbucket.org:pchr8/my-project.git
Push URL: git@github.com:pchr8/my-project.git
HEAD branch: master
Mentioned in the comments, it works, but has to be done twice of as it seems to rewrite the original remote: git remote set-url --add --push origin <...>
But maybe the most interesting thing there is .git/config
! I didn’t know it existed, it shows most of the same things but much easier to read/edit! It currently shows something like this:
> cat .git/config
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[branch "master"]
[user]
email = me@me.me
name = SH
[remote "bb"]
url = git@bitbucket.org:pchr8/my-project.git
fetch = +refs/heads/*:refs/remotes/bb/*
pushurl = git@bitbucket.org:pchr8/my-project.git
[remote "github"]
url = git@github.com:pchr8/my-project.git
fetch = +refs/heads/*:refs/remotes/github/*
pushurl = git@github.com:pchr8/my-project.git
[remote "origin"]
url = git@github.com:pchr8/my-project.git
fetch = +refs/heads/*:refs/remotes/origin/*
pushurl = git@bitbucket.org:pchr8/my-project.git
pushurl = git@github.com:pchr8/my-project.git
Adding the RedirectPermanent lines to .htaccess
in the root of pchr8.net, that now contains the following:
ErrorDocument 404 /404.html
ErrorDocument 403 /404.html
ErrorDocument 500 /500.html
RewriteRule ^wiki/(.*)$ /f/$1 [R=301,NC,L]
RewriteRule ^fiamma/(.*)$ /f/$1 [R=301,NC,L]
RedirectPermanent /d/dtb https://serhii.net/dtb
RedirectPermanent /blog https://serhii.net/blog
Experimenting with rewriting everything except /f/
, seems to work except for the main page https://www.pchr8.net/f/index.php/Pchr8.net_wiki_thing
RewriteEngine on
#RewriteRule (f) - [L]
RewriteCond %{REQUEST_URI} !^/f
RewriteRule (.*) https://serhii.net/$1 [R=301,L]
It gets redirected to serhii.net - maybe it chokes on the many weird characters or the repeat of pchr8.net?..
As per nfs docs 2, it’s very easily done just by running YourPrompt> tls-setup.sh
, and nfs takes care of all autorenewals, automatically sets up redirects etc. Awesome!
utimer
can do a countdown, count-..up?, and can work as a stopwatch. It outputs time remaining too.
A pizza dough recipe3 reminded me that
I have my vim macro for footnotes where it creates the [^..]
things and then I paste the URI manually, but what I’d actually like is something that automatically creates a footnote at current cursor position, and as content uses the URI currently in the clipboard register! TODO
(And also try to make it readable/interpretable this time)
To create a subdomain, you have to add it as “new” new domain and it takes care of everything, no magic with DNS records needed
Changed the zsh alias for it:
s () {task s project.not:w sprint.not:s "$*"}
Now on my non-work account, it shows non-work tasks from any sprint except “s” (which is a proxy of due:someday
).
Foreign Words (Fremdwörter) - really nice! Has specific suffixes and what genders they create in German. In general - I remember that excellent website.
Also: “das Thema, die Themen”) - which plural rule is that? TODO
Given that I need to push/pull it a lot now, I should exclude the generated .html files in .gitignore
W
opens the last closed window! … on the topic of ’learn well the tools you use daily'
Installed ding
! Still remains the best dictionary program ever.
ding buch
works!
TODO - add keybinding to search for currently selected word. Or a basic prompt to quickly look for words, a la dtb - and that ideally adds the needed words to a list, and maybe even generates anki flashcards from them!
ding -m
to start it minimally, likely make it floating for i3 by class, is a really nice start. Added this to config:
## Ding float
bindsym $ms+Shift+d exec ding -m
for_window [class="Ding"] floating enable
(got class from xprop
)
If default automatic settings are too strong, these work well: redshift -xO 2500 -b 0.7
Couldn’t load noisetorch, error 127 when attempting to get the needed privileges. The help of Noisetorch said this means pksudo
doesn’t work, and to fix this. After some googling, found a solution:
apt install policykit-1-gnome
Then add
/usr/lib/policykit-1-gnome/polkit-gnome-authentication-agent-1 &
to your autostart configuration. 1