Skip to content

Commit

Permalink
Merge pull request #10 from marienz/fetchtree
Browse files Browse the repository at this point in the history
Improve fetching performance (mainly for CI)
  • Loading branch information
marienz authored May 27, 2024
2 parents 31eaef4 + c042f8d commit 73cd965
Show file tree
Hide file tree
Showing 6 changed files with 55 additions and 79 deletions.
20 changes: 18 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,8 @@ jobs:
uses: DeterminateSystems/nix-installer-action@main
- name: Enable Magic Nix Cache
uses: DeterminateSystems/magic-nix-cache-action@main
with:
use-flakehub: false
- name: Update flake.lock
if: github.event_name == 'schedule' || ( github.event_name == 'workflow_dispatch' && inputs.updateFlakeLock )
run: |
Expand All @@ -56,12 +58,26 @@ jobs:
nix flake update --commit-lock-file
- name: Check flake.lock
uses: DeterminateSystems/flake-checker-action@main
# Update the caches daily, flush the cache monthly.
- name: Set cache keys
id: cache-keys
run: |
{
echo "key=$(date +'%Y-%m-%d')"
echo "restore=$(date +'%Y-%m-')"
} >> "$GITHUB_OUTPUT"
- name: Cache git checkouts
uses: actions/cache@v4
with:
path: ~/.cache/nix/gitv3
key: nix-gitv3-cache-${{ hashFiles('flake.lock') }}
restore-keys: nix-gitv3-cache-
key: nix-gitv3-cache-${{ steps.cache-keys.outputs.key }}
restore-keys: nix-gitv3-cache-${{ steps.cache-keys.outputs.restore }}
- name: Cache tarballs
uses: actions/cache@v4
with:
path: ~/.cache/nix/tarball-cache
key: nix-tarball-cache-${{ steps.cache-keys.outputs.key }}
restore-keys: nix-tarball-cache-${{ steps.cache-keys.outputs.restore }}
- name: nix flake check
run: nix flake check -L --show-trace
- name: Build packages for Cachix
Expand Down
1 change: 1 addition & 0 deletions checks.nix
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ let
# TODO: drop after NixOS 24.05 release.
emacs = emacs29;
doomLocalDir = "~/.local/share/nix-doom-unstraightened";
experimentalFetchTree = true;
};
mkDoom = args: (makeDoomPackages (common // args)).doomEmacs;
mkDoomDir = args: writeTextDir "init.el" (toInit args);
Expand Down
51 changes: 35 additions & 16 deletions default.nix
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,8 @@
profileName ? "nix",
/* Disable profile early in startup, so "normal" cache/state dirs are used. */
noProfileHack ? false,
/* Use fetchTree instead of fetchGit for package fetches. */
experimentalFetchTree ? false,

callPackages,
git,
Expand Down Expand Up @@ -233,23 +235,40 @@ let
else (throw "${name}: cannot derive url from recipe ${p.recipe or "<missing>"}"));
# Use builtins.fetchGit instead of nixpkgs's fetchFromGitHub because
# fetchGit allows fetching a specific git commit without a hash.
# TODO: port to fetchTree once (mostly) stable
# (in particular the github fetcher may be noticably more efficient)
src = builtins.fetchGit (
{
inherit url;
rev = pin;
allRefs = true;
submodules = !(p.recipe.nonrecursive or false);
# TODO: pull ref from derivation.src when not pulling it from p.recipe?
# Note Doom does have packages with pin + branch (or nonrecursive) set,
# expecting to inherit the rest of the recipe from Straight.
fetchGitArgs = {
inherit url;
rev = pin;
allRefs = true;
# Skip submodules by default because they seem to be hitting
# https://github.com/NixOS/nix/issues/10773 (or a similar caching issue) and for
# parity between fetchTree's github fetcher and fetchGit (Github's exports don't
# seem to contain submodules).
submodules = !(p.recipe.nonrecursive or true);
# TODO: pull ref from derivation.src when not pulling it from p.recipe?
# Note Doom does have packages with pin + branch (or nonrecursive) set,
# expecting to inherit the rest of the recipe from Straight.

# Always specify a ref to work around https://github.com/NixOS/nix/issues/10773
ref = p.recipe.branch or "HEAD";
}
// optionalAttrs (p ? recipe.depth) { shallow = p.recipe.depth == 1; }
);
# Always specify a ref to work around https://github.com/NixOS/nix/issues/10773
ref = p.recipe.branch or "HEAD";
}
// optionalAttrs (p ? recipe.depth) { shallow = p.recipe.depth == 1; };
src =
if experimentalFetchTree
then builtins.fetchTree (
if lib.hasPrefix "https://github.com/" url
then let
tail = lib.removePrefix "https://github.com/" url;
split = lib.splitString "/" tail;
owner = lib.head split;
repo = lib.removeSuffix ".git" (lib.elemAt split 1);
in {
type = "github";
inherit owner repo;
rev = pin;
} else ({
type = "git";
} // fetchGitArgs))
else builtins.fetchGit fetchGitArgs;
# Run locally to avoid a network roundtrip.
reqfile = runCommandLocal "${name}-deps" { } ''
${lib.getExe emacs} -Q --batch --script \
Expand Down
54 changes: 0 additions & 54 deletions doomdirs/example/init.el
Original file line number Diff line number Diff line change
Expand Up @@ -15,88 +15,34 @@
;; limitations under the License.

(doom! :completion
(company +childframe)
(corfu +orderless +icons +dabbrev)
vertico

:ui
doom
doom-dashboard
(emoji +unicode)
hl-todo
hydra
modeline
nav-flash
ophints
(popup +defaults)
(vc-gutter +pretty +diff-hl)
window-select

:editor
evil
file-templates
format
snippets

:emacs
dired
electric
ibuffer
undo
vc

:term
eshell
vterm

:checkers
(syntax +childframe)
spell

:tools
direnv
editorconfig
(eval +overlay)
(lookup +docsets)
(lsp +peek)
(magit +forge)
taskrunner

:os
(:if (featurep :system 'macos) macos)
(tty +osc)

:lang
(cc +lsp)
csharp
data
(dart +flutter +lsp)
emacs-lisp
(go +lsp)
(graphql +lsp)
(haskell +lsp)
json
(java +lsp)
(javascript +lsp)
latex
lua
markdown
(nix +lsp)
(org +pretty)
(python +lsp +pyright +cython)
(ruby +rails)
(rust +lsp)
(scheme +guile)
(sh +fish)
(web +css +html)
yaml

:email
(mu4e +org +gmail)
(wanderlust +gmail)

:app
(rss +org)

:config
(default +bindings +smartparens))
7 changes: 0 additions & 7 deletions doomdirs/example/packages.el
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,3 @@
(package! evil-escape :disable t)

(package! dotenv-mode)
(package! nginx-mode)
(package! protobuf-mode)
(package! systemd)
(package! meson-mode)
(package! caddyfile-mode)
(package! vala-mode)
(package! bpftrace-mode)
1 change: 1 addition & 0 deletions flake.nix
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,7 @@
doomDir = ./doomdirs/minimal;
doomLocalDir = "~/.local/share/nix-doom-unstraightened";
full = true;
experimentalFetchTree = true;
}).doomEmacs.emacsWithPackages.deps;
};
});
Expand Down

0 comments on commit 73cd965

Please sign in to comment.