diff --git a/engine/compresscss.sh b/engine/compresscss.sh index 763a779..3c4670f 100755 --- a/engine/compresscss.sh +++ b/engine/compresscss.sh @@ -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 diff --git a/src/css/y.css b/src/css/y.css index 7fb425a..a3f61fe 100644 --- a/src/css/y.css +++ b/src/css/y.css @@ -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 { diff --git a/src/drafts/XXXX-how-i-use-nix/index.org b/src/drafts/XXXX-how-i-use-nix/index.org index 1715512..329a98a 100644 --- a/src/drafts/XXXX-how-i-use-nix/index.org +++ b/src/drafts/XXXX-how-i-use-nix/index.org @@ -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]].