diff options
27 files changed, 240 insertions, 146 deletions
diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..e9e05c4 --- /dev/null +++ b/flake.lock @@ -0,0 +1,55 @@ +{ + "nodes": { + "flake-utils": { + "locked": { + "lastModified": 1676283394, + "narHash": "sha256-XX2f9c3iySLCw54rJ/CZs+ZK6IQy7GXNY4nSOyu2QG4=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "3db36a8b464d0c4532ba1c7dda728f4576d6d073", + "type": "github" + }, + "original": { + "id": "flake-utils", + "type": "indirect" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1677560409, + "narHash": "sha256-PIvUIsVNozPXe1FmNe9c6B8Febl3t9+51uBKMJ1Q8o0=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "9e56d6ec92c8fb4192f1392aa5c4101ad77f2070", + "type": "github" + }, + "original": { + "id": "nixpkgs", + "type": "indirect" + } + }, + "nur": { + "locked": { + "lastModified": 1677656154, + "narHash": "sha256-C+LNfSAlWyRVNiwBoYodxnrVzDymA5dR36dg1epXAk4=", + "owner": "nix-community", + "repo": "NUR", + "rev": "458246a5098156e4d8be62de85a03feec6a2e4fe", + "type": "github" + }, + "original": { + "id": "nur", + "type": "indirect" + } + }, + "root": { + "inputs": { + "flake-utils": "flake-utils", + "nixpkgs": "nixpkgs", + "nur": "nur" + } + } + }, + "root": "root", + "version": 7 +} @@ -1,17 +1,24 @@ { - outputs = { self, nur, ... }: { - nixosModules.personal = import ./modules/nixos; - homeModules.personal = import ./modules/home-manager; - overlays = { - default = self.overlays.personal; - personal = self: super: - let personal-pkgs = import ./pkgs (self.extend nur.overlay); - in { - personal = (super.personal or { }) // personal-pkgs; - lib = (super.lib or { }) // { - personal = (super.lib.personal or { }) // personal-pkgs.lib; + outputs = { self, flake-utils, nur, nixpkgs, ... }: + { + nixosModules.personal = import ./modules/nixos; + homeModules.personal = import ./modules/home-manager; + overlays = { + default = self.overlays.personal; + personal = self: super: + let personalPackages = import ./pkgs (super.extend nur.overlay); + in { + personal = (super.personal or { }) // personalPackages; + lib = (super.lib or { }) // { + personal = (super.lib.personal or { }) // personalPackages.lib; + }; }; + }; + } // flake-utils.lib.eachDefaultSystem (system: + let + pkgs = import nixpkgs { + inherit system; + overlays = [ nur.overlay ]; }; - }; - }; + in { packages = import ./pkgs pkgs; }); } diff --git a/modules/home-manager/personal/dotfiles/background-image b/modules/home-manager/personal/dotfiles/background-image Binary files differdeleted file mode 100644 index 4288f3e..0000000 --- a/modules/home-manager/personal/dotfiles/background-image +++ /dev/null diff --git a/modules/home-manager/personal/dotfiles/default.nix b/modules/home-manager/personal/dotfiles/default.nix index 27610ca..bccd4f8 100644 --- a/modules/home-manager/personal/dotfiles/default.nix +++ b/modules/home-manager/personal/dotfiles/default.nix @@ -2,7 +2,6 @@ { personal.home.dotfiles = { - wallpaper = ./background-image; latexmkrc = ./latexmkrc; rofi = ./rofi.rasi; spacemacs = ./spacemacs.el; diff --git a/modules/home-manager/personal/environment.nix b/modules/home-manager/personal/environment.nix index 3d29db1..7518c33 100644 --- a/modules/home-manager/personal/environment.nix +++ b/modules/home-manager/personal/environment.nix @@ -2,11 +2,10 @@ { home.packages = with pkgs; [ coreutils moreutils ]; - personal.home.wallpaper = lib.mkDefault config.personal.home.dotfiles.wallpaper; + personal.home.wallpaper = + lib.mkDefault pkgs.personal.static.wallpapers.nga-1973-68-1; - programs.bash = { - enable = lib.mkDefault true; - }; + programs.bash = { enable = lib.mkDefault true; }; home = { shellAliases = { diff --git a/modules/home-manager/personal/gui/x/i3/startup.nix b/modules/home-manager/personal/gui/x/i3/startup.nix index 9baf388..b40247b 100644 --- a/modules/home-manager/personal/gui/x/i3/startup.nix +++ b/modules/home-manager/personal/gui/x/i3/startup.nix @@ -15,9 +15,6 @@ # ++ autostartIf config.services.redshift.enable { # command = "systemctl --user start redshift"; # } - ++ autostartIf (config.personal.home.wallpaper != null) { - command = "${pkgs.feh}/bin/feh --bg-scale ${config.personal.home.wallpaper}"; - } # ++ autostartIf config.services.xidlehook.enable { # command = "systemctl --user start xidlehook.service"; # } diff --git a/modules/home-manager/personal/profiles.nix b/modules/home-manager/personal/profiles.nix index 25722f5..5aad4a4 100644 --- a/modules/home-manager/personal/profiles.nix +++ b/modules/home-manager/personal/profiles.nix @@ -51,7 +51,7 @@ in { { name = "Netflix"; genericName = "Streaming service"; - icon = "${pkgs.personal.netflixIcon}"; + icon = "${pkgs.personal.static.icons.netflix}"; comment = "Unlimited movies, TV shows, and more."; url = "https://www.netflix.com/fr-en/login"; categories = [ "AudioVideo" "Video" "Player" ]; @@ -59,7 +59,7 @@ in { { name = "MUBI"; genericName = "Streaming service"; - icon = "${pkgs.personal.mubiIcon}"; + icon = "${pkgs.personal.static.icons.mubi}"; comment = "Watch hand-picked cinema."; url = "https://mubi.com"; categories = [ "AudioVideo" "Video" "Player" ]; @@ -67,7 +67,7 @@ in { { name = "Deezer"; genericName = "Streaming service"; - icon = "${pkgs.personal.deezerIcon}"; + icon = "${pkgs.personal.static.icons.deezer}"; comment = "Listen to music online"; url = "https://deezer.com/login"; categories = [ "AudioVideo" "Audio" "Player" "Music" ]; diff --git a/modules/home-manager/personal/programs/firefox/default.nix b/modules/home-manager/personal/programs/firefox/default.nix index 1e97c40..f4696b1 100644 --- a/modules/home-manager/personal/programs/firefox/default.nix +++ b/modules/home-manager/personal/programs/firefox/default.nix @@ -4,7 +4,7 @@ with lib; let cfg = config.personal.firefox; userjs = pkgs.callPackage ./userjs.nix { - inherit (pkgs.personal) arkenfoxUserJS; + inherit (pkgs.personal.static.userjs) arkenfox; inherit (pkgs.lib.personal) toUserJS; }; engines = import ./engines.nix; @@ -23,7 +23,7 @@ let visibility: collapse; } ''; - extensions = with pkgs.personal; [ + extensions = with pkgs.personal.firefoxAddons; [ canvasblocker clearurls darkreader diff --git a/modules/home-manager/personal/programs/firefox/userjs.nix b/modules/home-manager/personal/programs/firefox/userjs.nix index ee105b3..75780ee 100644 --- a/modules/home-manager/personal/programs/firefox/userjs.nix +++ b/modules/home-manager/personal/programs/firefox/userjs.nix @@ -1,66 +1,68 @@ -{ arkenfoxUserJS, toUserJS }: +{ arkenfox, toUserJS }: -rec { - arkenfox = builtins.readFile "${arkenfoxUserJS}"; - default = arkenfox + toUserJS { - "keyword.enabled" = true; # 0801 - "signon.rememberSignons" = false; # 0901 - "security.nocertdb" = true; # 1222 - "media.peerconnection.enabled" = false; # 2001 - "media.peerconnection.ice.no_host" = true; # 2004 - "dom.allow_cut_copy" = true; # 2404 - "dom.battery.enabled" = false; # 2502 - "permissions.default.xr" = 2; # 2521 - "privacy.clearOnShutdown.siteSettings" = true; # 2811 +let + self = { + arkenfox = builtins.readFile "${arkenfox}"; + default = self.arkenfox + toUserJS { + "keyword.enabled" = true; # 0801 + "signon.rememberSignons" = false; # 0901 + "security.nocertdb" = true; # 1222 + "media.peerconnection.enabled" = false; # 2001 + "media.peerconnection.ice.no_host" = true; # 2004 + "dom.allow_cut_copy" = true; # 2404 + "dom.battery.enabled" = false; # 2502 + "permissions.default.xr" = 2; # 2521 + "privacy.clearOnShutdown.siteSettings" = true; # 2811 - # Personal - ## Warnings - "browser.tabs.warnOnClose" = false; - "browser.tabs.warnOnCloseOtherTabs" = false; - ## Updates - "app.update.auto" = false; - "browser.search.update" = false; - ## Appearance - "toolkit.legacyUserProfileCustomizations.stylesheets" = true; - ## Content behavior - "clipboard.autocopy" = false; - ## UX behavior - "browser.quitShortcut.disabled" = true; - "browser.tabs.closeWindowWithLastTab" = false; - ## UX features - "extensions.pocket.enabled" = false; - "identity.fxaccounts.enabled" = false; - }; + # Personal + ## Warnings + "browser.tabs.warnOnClose" = false; + "browser.tabs.warnOnCloseOtherTabs" = false; + ## Updates + "app.update.auto" = false; + "browser.search.update" = false; + ## Appearance + "toolkit.legacyUserProfileCustomizations.stylesheets" = true; + ## Content behavior + "clipboard.autocopy" = false; + ## UX behavior + "browser.quitShortcut.disabled" = true; + "browser.tabs.closeWindowWithLastTab" = false; + ## UX features + "extensions.pocket.enabled" = false; + "identity.fxaccounts.enabled" = false; + }; - streaming = default + toUserJS { - # Widevine (DRMs) - "media.gmp-widevinecdm.enabled" = true; - "media.eme.enabled" = true; - # Cache - "browser.cache.disk.enable" = true; - "browser.cache.offline.storage" = true; - # Privacy - "privacy.clearOnShutdown.cache" = false; - "privacy.clearOnShutdown.cookies" = false; - "privacy.clearOnShutdown.siteSettings" = false; - "privacy.clearOnShutdown.offlineApps" = false; - "privacy.resistFingerprinting" = false; # Netflix is whining - }; + streaming = self.default + toUserJS { + # Widevine (DRMs) + "media.gmp-widevinecdm.enabled" = true; + "media.eme.enabled" = true; + # Cache + "browser.cache.disk.enable" = true; + "browser.cache.offline.storage" = true; + # Privacy + "privacy.clearOnShutdown.cache" = false; + "privacy.clearOnShutdown.cookies" = false; + "privacy.clearOnShutdown.siteSettings" = false; + "privacy.clearOnShutdown.offlineApps" = false; + "privacy.resistFingerprinting" = false; # Netflix is whining + }; - videoconferencing = default + toUserJS { - # IMPORTANT: uncheck "Prevent WebRTC from leaking local IP addresses" in uBlock Origin's settings - # NOTE: if using RFP (4501) - # some sites, e.g. Zoom, need a canvas site exception [Right Click>View Page Info>Permissions] - # Discord video does not work: it thinks you are FF78: use a separate profile or spoof the user agent - "media.peerconnection.enabled" = true; - "media.peerconnection.ice.no_host" = false; # may or may not be required - "webgl.disabled" = false; # required for Zoom - "webgl.min_capability_mode" = false; - "media.getusermedia.screensharing.enabled" = true; # optional - "media.autoplay.blocking_policy" = - 0; # optional (otherwise add site exceptions) - "javascript.options.wasm" = - true; # optional (some platforms may require this) - "dom.webaudio.enabled" = true; + videoconferencing = self.default + toUserJS { + # IMPORTANT: uncheck "Prevent WebRTC from leaking local IP addresses" in uBlock Origin's settings + # NOTE: if using RFP (4501) + # some sites, e.g. Zoom, need a canvas site exception [Right Click>View Page Info>Permissions] + # Discord video does not work: it thinks you are FF78: use a separate profile or spoof the user agent + "media.peerconnection.enabled" = true; + "media.peerconnection.ice.no_host" = false; # may or may not be required + "webgl.disabled" = false; # required for Zoom + "webgl.min_capability_mode" = false; + "media.getusermedia.screensharing.enabled" = true; # optional + "media.autoplay.blocking_policy" = + 0; # optional (otherwise add site exceptions) + "javascript.options.wasm" = + true; # optional (some platforms may require this) + "dom.webaudio.enabled" = true; + }; }; -} +in self diff --git a/modules/home-manager/personal/programs/git.nix b/modules/home-manager/personal/programs/git.nix index 5d272dc..578f6a7 100644 --- a/modules/home-manager/personal/programs/git.nix +++ b/modules/home-manager/personal/programs/git.nix @@ -6,7 +6,7 @@ userEmail = lib.mkDefault "quentin@aristote.fr"; ignores = builtins.map builtins.readFile - (with pkgs.personal; [ emacsGitignore linuxGitignore direnvGitignore ]) + (with pkgs.personal.static.gitignore; [ direnv emacs linux ]) ++ [ # Personal rules '' diff --git a/modules/home-manager/personal/programs/thunderbird.nix b/modules/home-manager/personal/programs/thunderbird.nix index c3450af..e971e5a 100644 --- a/modules/home-manager/personal/programs/thunderbird.nix +++ b/modules/home-manager/personal/programs/thunderbird.nix @@ -1,7 +1,7 @@ { config, lib, pkgs, ... }: let - configDefault = builtins.readFile "${pkgs.personal.thunderbirdUserJS}" + configDefault = builtins.readFile "${pkgs.personal.static.userjs.thunderbird}" + pkgs.lib.personal.toUserJS { # 0391 "mail.bii.alert.show_preview" = false; diff --git a/pkgs/default.nix b/pkgs/default.nix index aec97a3..176d627 100644 --- a/pkgs/default.nix +++ b/pkgs/default.nix @@ -1,37 +1,35 @@ -pkgs: +super: let - mozillaAddons = pkgs.callPackage ./mozilla/addons { - inherit (pkgs.nur.repos.rycee.firefox-addons) buildFirefoxXpiAddon; - }; - gitignores = pkgs.callPackage ./gitignore { }; - icons = pkgs.callPackage ./icons { }; - personal = - # lib - { - lib = import ./lib { inherit (pkgs) lib; }; - } // - # css - { - line-awesome-css = pkgs.callPackage ./css/lineAwesome { }; - } // - # mozilla packages - mozillaAddons // { - arkenfoxUserJS = pkgs.callPackage ./mozilla/user-js/arkenfox.nix { }; - thunderbirdUserJS = - pkgs.callPackage ./mozilla/user-js/thunderbird.nix { }; - } // - # font metadata - { - fontawesomeMetadata = pkgs.callPackage ./fontMetadata/fontawesome.nix { }; + self = { + barista = super.callPackage ./barista { + fontawesomeMetadata = self.static.fontMetadata.fontawesome; materialDesignIconsMetadata = - pkgs.callPackage ./fontMetadata/materialDesignIcons.nix { }; - } // - # miscellaneous - { - barista = pkgs.callPackage ./barista { - inherit (personal) fontawesomeMetadata materialDesignIconsMetadata; + self.static.fontMetadata.materialDesignIcons; + }; + + lib = import ./lib { inherit (super) lib; }; + + lockscreen = super.callPackage ./lockscreen { }; + + firefoxAddons = super.callPackage ./firefoxAddons { + inherit (super.nur.repos.rycee.firefox-addons) buildFirefoxXpiAddon; + }; + + static = { + css = { lineAwesome = super.callPackage ./static/css/lineAwesome { }; }; + fontMetadata = { + fontawesome = super.callPackage ./static/fontMetadata/fontawesome { }; + materialDesignIcons = + super.callPackage ./static/fontMetadata/materialDesignIcons { }; + }; + gitignore = super.callPackage ./static/gitignore { }; + icons = super.callPackage ./static/icons { }; + userjs = { + arkenfox = super.callPackage ./static/userjs/arkenfox { }; + thunderbird = super.callPackage ./static/userjs/thunderbird { }; }; - lockscreen = pkgs.callPackage ./lockscreen { }; - } // gitignores // icons; -in personal + wallpapers = super.callPackage ./static/wallpapers { }; + }; + }; +in self diff --git a/pkgs/mozilla/addons/addons.json b/pkgs/firefoxAddons/addons.json index d39900d..d39900d 100644 --- a/pkgs/mozilla/addons/addons.json +++ b/pkgs/firefoxAddons/addons.json diff --git a/pkgs/mozilla/addons/default.nix b/pkgs/firefoxAddons/default.nix index f87acb5..f87acb5 100644 --- a/pkgs/mozilla/addons/default.nix +++ b/pkgs/firefoxAddons/default.nix diff --git a/pkgs/gitignore/default.nix b/pkgs/gitignore/default.nix deleted file mode 100644 index fbf2d2e..0000000 --- a/pkgs/gitignore/default.nix +++ /dev/null @@ -1,16 +0,0 @@ -{ fetchurl }: - -let - fetch-gitignore = module: sha256: - let url = "https://www.toptal.com/developers/gitignore/api/" + module; - name = module + ".gitignore"; - in fetchurl { inherit url sha256 name; }; -in { - emacsGitignore = fetch-gitignore "emacs" - "sha256:34LaJsGa5fFSMjE7l8JgQAmH8f07jcQmsaOdPVctHMk="; - linuxGitignore = fetch-gitignore "linux" - "sha256:Az39kpxJ1pG0T+3KUwx217+f+L8FQEWzwvRFSty8cJU="; - direnvGitignore = fetch-gitignore "direnv" - "sha256:CK47JLrsjf9yyjGAUfhjxLns0r1jDYgSBsp6LN0Yut8="; - fetcherGitignore = fetch-gitignore; -} diff --git a/pkgs/css/lineAwesome/default.nix b/pkgs/static/css/lineAwesome/default.nix index 15946e6..b1376fe 100644 --- a/pkgs/css/lineAwesome/default.nix +++ b/pkgs/static/css/lineAwesome/default.nix @@ -12,8 +12,8 @@ stdenv.mkDerivation rec { phases = [ "installPhase" ]; installPhase = '' - cp $src $out - substituteInPlace $out --replace '../fonts' '${fontsRelativeDirectory}' \ - --replace 'font-display: auto' 'font-display: ${fontDisplay}' + cp "$src" "$out" + substituteInPlace "$out" --replace '../fonts' '${fontsRelativeDirectory}' \ + --replace 'font-display: auto' 'font-display: ${fontDisplay}' ''; } diff --git a/pkgs/fontMetadata/fontawesome.nix b/pkgs/static/fontMetadata/fontawesome/default.nix index a54537e..a54537e 100644 --- a/pkgs/fontMetadata/fontawesome.nix +++ b/pkgs/static/fontMetadata/fontawesome/default.nix diff --git a/pkgs/fontMetadata/materialDesignIcons.nix b/pkgs/static/fontMetadata/materialDesignIcons/default.nix index fb24f3c..fb24f3c 100644 --- a/pkgs/fontMetadata/materialDesignIcons.nix +++ b/pkgs/static/fontMetadata/materialDesignIcons/default.nix diff --git a/pkgs/static/gitignore/default.nix b/pkgs/static/gitignore/default.nix new file mode 100644 index 0000000..ac825a5 --- /dev/null +++ b/pkgs/static/gitignore/default.nix @@ -0,0 +1,12 @@ +{ fetchurl, lib }: + +let + fetchGitignore = module: sha256: + let + url = "https://www.toptal.com/developers/gitignore/api/" + module; + name = module + ".gitignore"; + in fetchurl { inherit url sha256 name; }; + sources = lib.importJSON ./sources.json; +in { + fetcher = fetchGitignore; +} // builtins.mapAttrs fetchGitignore sources diff --git a/pkgs/static/gitignore/sources.json b/pkgs/static/gitignore/sources.json new file mode 100644 index 0000000..a46ff9e --- /dev/null +++ b/pkgs/static/gitignore/sources.json @@ -0,0 +1,6 @@ +{ + "direnv": "CK47JLrsjf9yyjGAUfhjxLns0r1jDYgSBsp6LN0Yut8=", + "emacs" : "34LaJsGa5fFSMjE7l8JgQAmH8f07jcQmsaOdPVctHMk=", + "latex" : "yumKOkYA44Mnfm7giSDWKFEGSmP8/1xVbcSQCfc5uBA=", + "linux" : "Az39kpxJ1pG0T+3KUwx217+f+L8FQEWzwvRFSty8cJU=" +} diff --git a/pkgs/icons/default.nix b/pkgs/static/icons/default.nix index 3f1f3bf..a98aee9 100644 --- a/pkgs/icons/default.nix +++ b/pkgs/static/icons/default.nix @@ -1,14 +1,14 @@ { fetchurl }: { - netflixIcon = fetchurl { + netflix = fetchurl { url = "https://www.vectorlogo.zone/logos/netflix/netflix-icon.svg"; sha256 = "0b4gqhw9y62fm72x61q03yzbllgfxpkjbbsdvj7d5wg3jshjkgdb"; }; - mubiIcon = fetchurl { + mubi = fetchurl { url = "https://mubi.com/logo"; sha256 = "1h6qi579dcmd7l9mmwq2c4y67lbpkfjwq19kivfnfxwr38f769h4"; }; - deezerIcon = fetchurl { + deezer = fetchurl { url = "https://raw.githubusercontent.com/edent/SuperTinyIcons/master/images/svg/deezer.svg"; sha256 = "1qcj1gqz8gc9cwlj4cl6yj5ik1vz4ya6qcncr5fbciprzaaf3pg9"; }; diff --git a/pkgs/icons/generate-package.sh b/pkgs/static/icons/generate.sh index bf34c84..b5df4ab 100755 --- a/pkgs/icons/generate-package.sh +++ b/pkgs/static/icons/generate.sh @@ -1,4 +1,4 @@ -icons=$(cat icons.txt) +icons=$(cat urls.txt) echo '{ fetchurl }:' | tee default.nix echo '{' | tee -a default.nix @@ -6,6 +6,7 @@ while read -r line; do name=$(echo $line | cut -f1 -d' ') url=$(echo $line | cut -f2 -d' ') sha256=$(nix-prefetch-url $url 2>/dev/null) - echo -e "\t${name}Icon = fetchurl {\n\t\turl = \"$url\";\n\t\tsha256 = \"$sha256\";\n\t};" | tee -a default.nix + echo -e "\t${name} = fetchurl {\n\t\turl = \"$url\";\n\t\tsha256 = \"$sha256\";\n\t};" | tee -a default.nix done <<< $icons echo '}' | tee -a default.nix + diff --git a/pkgs/icons/icons.txt b/pkgs/static/icons/urls.txt index 388daa2..388daa2 100644 --- a/pkgs/icons/icons.txt +++ b/pkgs/static/icons/urls.txt diff --git a/pkgs/mozilla/user-js/arkenfox.nix b/pkgs/static/userjs/arkenfox/default.nix index c464f34..c464f34 100644 --- a/pkgs/mozilla/user-js/arkenfox.nix +++ b/pkgs/static/userjs/arkenfox/default.nix diff --git a/pkgs/mozilla/user-js/thunderbird.nix b/pkgs/static/userjs/thunderbird/default.nix index 8899d38..8899d38 100644 --- a/pkgs/mozilla/user-js/thunderbird.nix +++ b/pkgs/static/userjs/thunderbird/default.nix diff --git a/pkgs/static/wallpapers/default.nix b/pkgs/static/wallpapers/default.nix new file mode 100644 index 0000000..4abeb38 --- /dev/null +++ b/pkgs/static/wallpapers/default.nix @@ -0,0 +1,22 @@ +{ stdenv, fetchurl, imagemagick, lib }: + +let + fetchWallpaper = + { name, url, sha256, resolution ? "1920x1080", offset ? "0x0" }: + stdenv.mkDerivation { + inherit name; + src = fetchurl { + inherit url sha256; + }; + buildInputs = [ imagemagick ]; + phases = [ "unpackPhase" ]; + unpackPhase = '' + convert "$src" -resize "${resolution}^" \ + -crop "${resolution}+${offset}" \ + "$out" + ''; + }; + sources = lib.importJSON ./sources.json; +in { + fetcher = fetchWallpaper; +} // builtins.mapAttrs (_: fetchWallpaper) sources diff --git a/pkgs/static/wallpapers/sources.json b/pkgs/static/wallpapers/sources.json new file mode 100644 index 0000000..a3c104a --- /dev/null +++ b/pkgs/static/wallpapers/sources.json @@ -0,0 +1,12 @@ +{ + "artic-1942-51": { + "name": "Nighthawks_by_Edward_Hopper_1942.jpg", + "url": "https://upload.wikimedia.org/wikipedia/commons/a/a8/Nighthawks_by_Edward_Hopper_1942.jpg", + "sha256": "Rzp2AoAvjoB5t2elzSv+Eg6978tzviPyCbxLq2oIU6E=" + }, + "nga-1973-68-1": { + "name": "La_vallée_de_Riaux_près_de_l'Estaque,_par_Paul_Cézanne,_NGA.jpg", + "url": "https://upload.wikimedia.org/wikipedia/commons/8/89/La_vall%C3%A9e_de_Riaux_pr%C3%A8s_de_l%27Estaque%2C_par_Paul_C%C3%A9zanne%2C_NGA.jpg", + "sha256": "F3FPz0dmyxMk9BzV9DabGkECLbYBAIH96a5KOivvrak=" + } +} |
