updated colors and CSS

This commit is contained in:
Yann Esposito (Yogsototh) 2020-06-14 23:52:09 +02:00
parent ec94f39e93
commit 35f24f831d
Signed by untrusted user who does not match committer: yogsototh
GPG key ID: 7B19A4C650D59646
3 changed files with 209 additions and 140 deletions

View file

@ -1,7 +1,8 @@
#!/usr/bin/env nix-shell
#!nix-shell --pure
#!nix-shell -i bash
#!nix-shell -I nixpkgs="https://github.com/NixOS/nixpkgs/archive/19.09.tar.gz"
#!nix-shell -p minify
#!nix-shell -p bash minify
# nix-shell -p nodePackages.clean-css

View file

@ -112,7 +112,7 @@ html {
}
body {
font-family: "American Typewriter", Georgia, Cambria, 'Times New Roman', Times, serif;
font-family: "American Typewriter", Georgia, serif;
line-height: 1.5;
max-width: 60ch;
@ -125,7 +125,7 @@ body {
counter-reset: definition;
color: hsl(0, 5%, 10%);
background-color: hsl(210, 20%, 98%);
background-color: hsl(218, 20%, 98%);
text-rendering: optimizeLegibility;
}
@ -144,12 +144,6 @@ a:not([class]) {
text-decoration-skip-ink: auto;
}
/* Make links red */
a,
a:visited {
color: #a00;
}
/* Make images easier to work with */
img {
max-width: 100%;
@ -181,12 +175,12 @@ kbd {
font-family: Courier, monospace;
}
pre {
padding: 1rem 1.4rem;
padding: 1rem;
max-width: 100%;
overflow: auto;
border: 1px solid hsl(210, 15%, 49%);
border: 1px solid hsl(218, 15%, 49%);
border-radius: 4px;
background: hsl(210, 40%, 96%);
background: hsl(218, 40%, 96%);
font-size: 85%;
}
pre code {
@ -194,8 +188,8 @@ pre code {
position: relative;
}
kbd {
background: hsl(210, 5%, 100%);
border: 1px solid hsl(210, 5%, 70%);
background: hsl(218, 5%, 100%);
border: 1px solid hsl(218, 5%, 70%);
border-radius: 2px;
padding: 2px 4px;
font-size: 75%;
@ -238,8 +232,9 @@ nav li {
}
/* Center definitions (most useful for display equations) */
dl dt { font-weight: 700; }
dl dd {
text-align: center;
padding-left: 3rem;
}
/* Theorem */
@ -414,6 +409,8 @@ body>input { display: none; }
#labels > .content { margin: 0 auto; text-align: center; }
label { font-weight: 700; }
label:hover { cursor: pointer; }
label ~ pre { margin-top: 0; }
.org-src-container { margin: 1rem 0; }
#logo { text-align: center; }
body { margin:0; padding: 0; border: 0; max-width: none;}
#preamble, #postamble { text-align: center; }
@ -426,7 +423,13 @@ figure img { width: 100%; }
.footdef > sup { vertical-align: top; font-size: medium; }
.footdef > sup > a { padding: 0.5em; }
.footpara { display: inline; }
footer { margin: 3em 0; padding: 1em 0; border-top: solid 1px; border-bottom: solid 1px; line-height: 1em; }
footer { margin: 3em 0;
padding: 1em 0;
border-top: solid 1px;
border-bottom: solid 1px;
line-height: 1em;
font-size: 0.85em;
}
td { border-bottom: none; padding: .2rem; }
table { margin-top: 1rem; }
nav { text-align: center; padding: 2em 0; }
@ -458,24 +461,32 @@ pre { line-height: 1em; }
--fg0: var(--b0);
--fg: var(--b02);
--rfg: #000;
--hl: var(--o);
--hl: var(--r);
}
/* dark preferred */
@media (prefers-color-scheme: dark)
{
:root {
--bg: hsl(210,20%,11%);
--bg: hsl(218,20%,16%);
--rbg: var(--b03);
--fg: var(--b1);
--fg: var(--b0);
--fg0: var(--b00);
--rfg: var(--b2);
--hl: var(--g);
--y: #ae8c51;
--o: #a9654a;
--r: #af6255;
--m: #ae5e7d;
--v: #6774b2;
--b: #3f8cc3;
--c: #15a198;
--g: #939452;
}
img { filter: brightness(0.7) saturate(0.5); }
pre {
background: hsl(210,40%,15%);
border-color: hsl(210,15%,43%);
background: hsl(218,20%,18%);
border-color: hsl(218,15%,23%);
}
}
@ -487,30 +498,53 @@ input#l:checked ~ div {
--fg: var(--b02);
--rfg: #000;
--hl: var(--o);
--y: #c18600;
--o: #d84100;
--r: #e62729;
--m: #ec0085;
--v: #6c71c4;
--b: #0095ff;
--c: #00b0a3;
--g: #879a00;
}
input#l:checked ~ div img {
filter: none;
}
input#l:checked ~ div pre {
border: 1px solid hsl(210, 15%, 49%);
background: hsl(210, 40%, 96%);
border: 1px solid hsl(218, 15%, 49%);
background: hsl(218, 40%, 96%);
}
/* dark checked */
input#d:checked ~ div {
--bg: hsl(210,20%,11%);
--bg: hsl(218,20%,16%);
--rbg: var(--b03);
--fg: var(--b1);
--fg: var(--b0);
--fg0: var(--b00);
--rfg: var(--b2);
--hl: var(--g);
--y: #ae8c51;
--o: #a9654a;
--r: #af6255;
--m: #ae5e7d;
--v: #6774b2;
--b: #3f8cc3;
--c: #15a198;
--g: #939452;
}
input#d:checked ~ div img {
filter: brightness(0.7) saturate(0.5);
}
input#d:checked ~ div pre {
background: hsl(210,40%,15%);
border-color: hsl(210,15%,43%);
background: hsl(218,20%,18%);
border-color: hsl(218,15%,23%);
}
/* ---- */
::selection {
background: var(--m);
color: hsl(218,40%,96%);
text-decoration: hsl(218,40%,96%);
}
body, body > div {

View file

@ -11,118 +11,163 @@
#+OPTIONS: H:5 auto-id:t toc:nil
#+STARTUP: showeverything
In this article I'll explain how I use nix.
I don't use NixOS nor any Linux as my main desktop environment[fn:desktop].
Still I use [[https://nixos.org/nix][nix]] on a few mac computers.
It has multiple usages.
Have you ever written a small script and you update your system and this
stop working?
Have you copied your tool/script to another machine it doesn't work because
some dependency is missing?
Have you tried to sync your dotfiles to another env and there are a few
details not working? Some missing dependency?
If the answer is yes, then [[https://nixos.org/nix][nix]] can help.
First, let's start by the bad news.
Recent macOS security policy made nix a bit harder to install on a mac.
See [[https://hydra.nixos.org/build/119559243/download/1/manual/#sect-macos-installation][macOS Installation instructions]].
** Scripts
:PROPERTIES:
:CUSTOM_ID: scripts
:END:
Once you have nix installed you should update the nix-channel.
Mainly a nix-channels is where are the definitions of all the packages.
See [[https://hydra.nixos.org/build/119559243/download/1/manual/#sec-channels][nixOS documentation]].
Suppose you want to write a portable script.
For example, the script I use to minify my CSS.
Here it is:
#+begin_src shell
#!/usr/bin/env nix-shell
#!nix-shell --pure
#!nix-shell -i bash
#!nix-shell -I nixpkgs="https://github.com/NixOS/nixpkgs/archive/19.09.tar.gz"
#!nix-shell -p bash minify
minify "$1" > "$2"
#+end_src
So let's analyze each line of the header block:
- ~#!/usr/bin/env nix-shell~ :: basic, use ~nix-shell~ to run the script.
- ~#!nix-shell --pure~ :: only use dependencies installed in this nix shell
environment. A bit as if the PATH environment variable was emptied.
- ~#!nix-shell -i bash~ :: tell ~nix-shell~ to run ~bash~
- ~#!nix-shell -I nixpkgs="https://github.com/NixOS/nixpkgs/archive/19.09.tar.gz"~ ::
pin the nixpkgs using this archive.
- ~#!nix-shell -p bash minify~ :: install ~bash~ and ~minify~ in the nix shell.
Now if the script is run on a machine with ~nix~ installed you can be
pretty sure it will work as expected.
Even if I update my OS and I forget about this script for a few years.
As long as I can install nix on the new system and I could download the tar
file the script will be run the same way as the day I wrote it.
** Temporary working env
:PROPERTIES:
:CUSTOM_ID: temporary-working-env
:END:
Quite often, I need to do something, and run a specific command that need
me to install a very specific command.
And I'm pretty sure I will not use this tool ever again.
For those cases, what I do, is generally run my command directly with a
fresh ~nix-shell~.
#+begin_src shell
> nix-shell -p httpie
[nix-shell:~]$ ... here I can use httpie ...
#+end_src
** Home Manager
:PROPERTIES:
:CUSTOM_ID: home-manager
:END:
First, I use [[https://github.com/rycee/home-manager][home-manager]], it's first usage it to list a reproductible list
of application I need on all my desktop environments.
So i edit the file =~/.config/nixpkgs/home.nix=.
I provide a list of packages I want to have when I start a new shell.
A few years ago I used =brew= to install the tools I need.
With =nix= you can install a new tool with ~nix-env -i~ instead of ~brew install~.
Still recently I prefer to use [[https://github.com/rycee/home-manager][home-manager]].
The main advantage is that it is even more reproductible and can easily be
shared accross different machines.
Mainly when I need a new binary I add it in a description list in the file
=~/.config/nixpkgs/home.nix=.
It looks like this:
#+begin_src nix
home.packages = with pkgs; [
# nix
nix-prefetch-git
lorri
# emacs
emacsMacport
imagemagick
gnupg
# vim
neovim
# shell
direnv
fasd
fd
findutils
fortune
gawk
git
gitAndTools.diff-so-fancy
graphviz
htop
httpie
jq
jwt-cli
libressl
mustache-go
pandoc
ripgrep
rtv
wakatime
xpdf # pdftotext
yadm
youtube-dl
# clojure
leiningen
boot
adoptopenjdk-bin
joker
# Haskell
ghc
cabal-install
(all-hies.selection
{ selector = p:
{ inherit (p) ghc865; };})
# Common LISP
sbcl
# mails
offlineimap
notmuch
msmtp
gmailieer
# docker
docker-compose
# weechat
rel20weechat
aspell
aspellDicts.en
aspellDicts.fr
];
home.packages = with pkgs; [
# emacs
emacsMacport
imagemagick
gnupg
# shell
direnv
...
];
#+end_src
then I simply run ~home-manager switch~ and I've got all those tools in my env.
*** Pinning the packages
:PROPERTIES:
:CUSTOM_ID: pinning-the-packages
:END:
#+begin_src nix
{ config, pkgs, ... }:
let
# ...
pkgs = import (fetchGit {
name = "nixpkgs20";
url = "https://github.com/NixOS/nixpkgs";
# obtained via
# git ls-remote https://github.com/NixOS/nixpkgs nixpkgs-20.03-darwin
ref = "refs/heads/nixpkgs-20.03-darwin";
rev = "58f884cd3d89f47672e649c6edfb2382d4afff6a";
}) {};
# ...
in {
# ...
}
#+end_src
*** Specific tools
:PROPERTIES:
:CUSTOM_ID: specific-tools
:END:
There are a few noticiable artifact here:
The first one is ~rel20weechat~ is a very specify build of weechat with the
The first one is ~weechat~ is a very specify build of weechat with the
plugin I need. So here is the block I use:
#+begin_src nix
rel20 = import (fetchGit {
name = "nixpkgs20";
url = "https://github.com/NixOS/nixpkgs";
# obtained via
# git ls-remote https://github.com/NixOS/nixpkgs nixpkgs-20.03-darwin
ref = "refs/heads/nixpkgs-20.03-darwin";
rev = "58f884cd3d89f47672e649c6edfb2382d4afff6a";
}) {};
rel20weechat = rel20.weechat.override {
configure = { availablePlugins, ... }: {
# plugins = with availablePlugins; [ python perl guile ];
scripts = with pkgs.weechatScripts; [ wee-slack ];
let
...
rel20weechat = rel20.weechat.override {
configure = { availablePlugins, ... }: {
# plugins = with availablePlugins; [ python perl guile ];
scripts = with pkgs.weechatScripts; [ wee-slack ];
};
};
};
...
in
{
...
home.packages = with pkgs; [... rel20weechat ...];
...
}
#+end_src
First ~rel20~ pin a nixpkgs some specific commit of nix packages.
Second, I overriden the default packages of the =weechat= package.
Another interresting one is this block:
*** Another nice tool is =sws=
:PROPERTIES:
:CUSTOM_ID: another-nice-tool-is--sws-
:END:
I use macOS so even though I'm using a darwin focused nixpkgs
sometimes a few package can be broken and can't be installed.
That occurred with [[https://hackage.haskell.org/package/sws][=sws=]] during the upgrade to 20.03 on darwin.
This is a simple tool that need haskell to be compiled locally and
installed.
Here is how I could install it:
#+begin_src nix
let
@ -133,46 +178,35 @@ let
ref = "refs/heads/nixpkgs-19.09-darwin";
rev = "2f9bafaca90acd010cccd0e79e5f27aa7537957e";
}) {};
haskellDeps = ps: with ps; [
base
protolude
tidal
shake
rel19.haskellPackages.sws
];
ghc = pkgs.haskellPackages.ghcWithPackages haskellDeps;
...
in
home.packages = with pkgs; [
...
ghc
rel19.haskellPackages.sws
...
]
#+end_src
So it means I want to install =ghc= the main Haskell compiler.
But also with some specific haskell packages.
The interresting part, is that in most classical OS environment if you want
a package from a specific language platform.
You need to install the package manager for this language (npm, pip,
etc...).
And in =nixpkgs= there are formulae for most of these language specific
packages.
So instead of just installing =cabal-install= and then installing the
packages I need.
Which could also go bad, because they might be upgraded and not be
compatible all at the same time.
I used nix to install the packages I needed.
And one interresting detail.
One package [[https://hackage.haskell.org/package/sws][=sws=]] is broken in 20.03 on darwin.
So I used the older version from 19.09.
[fn:desktop]: I'm using macOS, and I have multiple macs.
A laptop and two desktop machines.
Using the 27" iMac is my ultimate work station.
Using the 27″ iMac is my ultimate work station.
It really enhance my productivity.
Still the laptop is a superior work environment for more casual tasks.
I guess I might write someday about my full work environment.
** Install
:PROPERTIES:
:CUSTOM_ID: install
:END:
First, let's start by the bad news.
Recent macOS security policy made nix a bit harder to install on a mac.
See [[https://hydra.nixos.org/build/119559243/download/1/manual/#sect-macos-installation][macOS Installation instructions]].
Once you have nix installed you should update the nix-channel.
Mainly a nix-channels is where are the definitions of all the packages.
See [[https://hydra.nixos.org/build/119559243/download/1/manual/#sec-channels][nixOS documentation]].