diff --git a/.gitignore b/.gitignore index 0372e94..73463df 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ .DS_Store *.auth +result diff --git a/README.md b/README.md index 80100d8..9e32141 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,7 @@ ## Installation +⚠️ I have switched to a combination of `nix-darwin` and `home-manager`. The installation instructions below only do not work that setup. + ```bash # nix sh <(curl -L https://nixos.org/nix/install) diff --git a/config/kitty.nix b/config/kitty.nix deleted file mode 100644 index f6e311d..0000000 --- a/config/kitty.nix +++ /dev/null @@ -1,6 +0,0 @@ -{ - xdg.configFile.kitty = { - source = ./kitty; - recursive = true; - }; -} diff --git a/config/kitty/kitty.conf b/config/kitty/kitty.conf deleted file mode 100644 index 9c8284f..0000000 --- a/config/kitty/kitty.conf +++ /dev/null @@ -1,40 +0,0 @@ -shell /Users/daniel/.nix-profile/bin/fish --interactive -shell_integration no-cursor - -# Fonts -font_family JetBrainsMono Nerd Font -bold_font auto -italic_font auto -bold_italic_font auto - -font_size 13.0 - -# Theme -include dracula.conf - -window_padding_width 3 - -tab_title_template "{index}: {title[:25]}" -tab_bar_style separator -tab_separator " ┇ " - -macos_titlebar_color background -macos_traditional_fullscreen yes -macos_show_window_title_in window - -# Keymap -kitty_mod cmd - -# Cursor -cursor_blink_interval 0 - -# Mouse -detect_urls no -allow_hyperlinks no - -# Bell -enable_audio_bell no -visual_bell_duration 0.0 - -# Scrollback -scrollback_pager_history_size 2 diff --git a/darwin-configuration.nix b/darwin-configuration.nix new file mode 100644 index 0000000..50b2447 --- /dev/null +++ b/darwin-configuration.nix @@ -0,0 +1,41 @@ +{ pkgs, lib, ... }: + +{ + nix = { + binaryCaches = [ + "https://nix-community.cachix.org" + ]; + + binaryCachePublicKeys = [ + "nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs=" + ]; + + trustedUsers = [ + "@admin" + ]; + + extraOptions = '' + experimental-features = nix-command flakes + keep-derivations = true + keep-outputs = true + auto-optimise-store = true + ''; + }; + + users.nix.configureBuildUsers = true; + + environment = { + darwinConfig = "$HOME/.config/nixpkgs/darwin-configuration.nix"; + }; + + services = { + nix-daemon.enable = true; + }; + + fonts = { + enableFontDir = true; + fonts = with pkgs; [ + (nerdfonts.override { fonts = [ "JetBrainsMono" ]; }) + ]; + }; +} diff --git a/flake.lock b/flake.lock index 37726e8..46b3c08 100644 --- a/flake.lock +++ b/flake.lock @@ -1,5 +1,25 @@ { "nodes": { + "darwin": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1642495030, + "narHash": "sha256-u1ZlFbLWzkM6zOfuZ1tr0tzTuDWucOYwALPWDWLorkE=", + "owner": "lnl7", + "repo": "nix-darwin", + "rev": "bcdb6022b3a300abf59cb5d0106c158940f5120e", + "type": "github" + }, + "original": { + "owner": "lnl7", + "repo": "nix-darwin", + "type": "github" + } + }, "flake-compat": { "flake": false, "locked": { @@ -38,11 +58,11 @@ ] }, "locked": { - "lastModified": 1643837728, - "narHash": "sha256-iW/5eMRQmzdctv2dAUlIaZnVWwcmaznNajS+ft1MXHg=", + "lastModified": 1643919871, + "narHash": "sha256-qDDTcqvKcrdIOHfdjbzIniE8+gsopiE+3qC/y14ItyY=", "owner": "nix-community", "repo": "home-manager", - "rev": "9d369c75ce2fdeb296ad42bcdc8c1a523c494550", + "rev": "1fa809f7830d5febc8638cd6edc1dfab293df4af", "type": "github" }, "original": { @@ -135,6 +155,7 @@ }, "root": { "inputs": { + "darwin": "darwin", "home-manager": "home-manager", "neovim-nightly-overlay": "neovim-nightly-overlay", "nifoc-overlay": "nifoc-overlay", diff --git a/flake.nix b/flake.nix index 7f77302..1ef367a 100644 --- a/flake.nix +++ b/flake.nix @@ -2,6 +2,11 @@ inputs = { nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable"; + darwin = { + url = "github:lnl7/nix-darwin"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + home-manager = { url = "github:nix-community/home-manager"; inputs.nixpkgs.follows = "nixpkgs"; @@ -18,35 +23,38 @@ }; }; - outputs = inputs@{ self, nixpkgs, home-manager, ... }: { - homeConfigurations = { - daniel = home-manager.lib.homeManagerConfiguration { + outputs = inputs@{ self, nixpkgs, darwin, home-manager, ... }: + let + overlay-neovim = inputs.neovim-nightly-overlay.overlay; + overlay-nifoc = inputs.nifoc-overlay.overlay; + + nixpkgsConfig = { + overlays = [ + overlay-neovim + overlay-nifoc + ]; + + config = { + allowUnfree = true; + allowBroken = true; + }; + }; + in + { + darwinConfigurations."Styx" = darwin.lib.darwinSystem { system = "aarch64-darwin"; - homeDirectory = "/Users/daniel"; - username = "daniel"; - stateVersion = "21.11"; + modules = [ + ./darwin-configuration.nix - configuration = { config, pkgs, ... }: - let - overlay-neovim = inputs.neovim-nightly-overlay.overlay; - overlay-nifoc = inputs.nifoc-overlay.overlay; - in + home-manager.darwinModules.home-manager { - nixpkgs = { - overlays = [ - overlay-neovim - overlay-nifoc - ]; - - config = { - allowUnfree = true; - allowBroken = true; - }; - }; - - imports = [ ./home.nix ]; - }; + nixpkgs = nixpkgsConfig; + nix.nixPath = { nixpkgs = "${nixpkgs}"; }; + home-manager.useGlobalPkgs = true; + home-manager.useUserPackages = true; + home-manager.users.daniel = import ./home.nix; + } + ]; }; }; - }; } diff --git a/home.nix b/home.nix index e6da46e..bb62efe 100644 --- a/home.nix +++ b/home.nix @@ -5,7 +5,7 @@ ./programs/fish.nix ./programs/starship.nix ./programs/direnv.nix - ./config/kitty.nix + ./programs/kitty.nix ./programs/nvim @@ -24,6 +24,8 @@ ]; home = { + stateVersion = "21.11"; + packages = with pkgs; [ aria2 arp-scan @@ -56,25 +58,25 @@ yt-dlp ]; + sessionVariables = { + TERMINFO_DIRS = "${pkgs.kitty.terminfo.outPath}/share/terminfo"; + }; + activation = { updateAppCaches = lib.hm.dag.entryAfter [ "onFilesChange" "installPackages" "copyFonts" ] '' - # nixpkgs - echo "Calculating new NIX_PATH value ..." - "$HOME/.bin/calculate-nix-path" - # neovim echo -n 'Removing luacache file: ' rm -f "$HOME/.cache/nvim/luacache" echo 'Done' - echo -n 'Running LuaCacheClear: ' - nvim -c 'try | execute "LuaCacheClear" | echo "Done" | catch /.*/ | echo "Command not found" | endtry | q' --headless - printf '\nRunning TSUpdateSync ... ' - nvim -c 'try | execute "TSUpdateSync" | echo "Done" | catch /.*/ | echo "Command not found" | endtry | q' --headless - printf '\n' - ''; - reportChanges = lib.hm.dag.entryAfter [ "updateAppCaches" ] '' - nvd diff $oldGenPath $newGenPath + nvim_bin="/etc/profiles/per-user/$USER/bin/nvim" + if [ -e "$nvim_bin" ]; then + echo -n 'Running LuaCacheClear: ' + $nvim_bin -c 'try | execute "LuaCacheClear" | echo "Done" | catch /.*/ | echo "Command not found" | endtry | q' --headless + printf '\nRunning TSUpdateSync ... ' + $nvim_bin -c 'try | execute "TSUpdateSync" | echo "Done" | catch /.*/ | echo "Command not found" | endtry | q' --headless + printf '\n' + fi ''; }; }; diff --git a/programs/fish.nix b/programs/fish.nix index 17ab9b6..d785139 100644 --- a/programs/fish.nix +++ b/programs/fish.nix @@ -67,7 +67,7 @@ ]; shellAliases = { - hmsw = "home-manager switch --flake ~/.config/nixpkgs/#$USER"; + drsw = "nix-darwin-switch"; j = "z"; ji = "zi"; la = "exa --long --all --group --header --group-directories-first --sort=type --icons"; @@ -80,7 +80,7 @@ yti = "ytdl_with_options -F"; upa = "nix flake update ~/.config/nixpkgs -v"; upn = "$HOME/.config/nixpkgs/programs/nvim/update-plugins.sh"; - ucl = "nix-collect-garbage -d && nix-store --gc && calculate-nix-path"; + ucl = "nix-collect-garbage -d && nix-store --gc"; }; functions = { @@ -111,12 +111,9 @@ # Disable greeting set fish_greeting - if test -e "$HOME/.cache/fish/nix_path_value" - set -gx NIX_PATH (cat "$HOME/.cache/fish/nix_path_value") - end - - if test -e /nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh - fenv source /nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh + if [ -z "$__NIX_DARWIN_SET_ENVIRONMENT_DONE" ] + set __nifoc_nix_darwin_set_env (cat /run/current-system/etc/bashrc | grep '-set-environment' | cut -d '.' -f 2) + fenv source "$__nifoc_nix_darwin_set_env" end if test -d "$HOME/.bin" diff --git a/programs/kitty.nix b/programs/kitty.nix new file mode 100644 index 0000000..b488f21 --- /dev/null +++ b/programs/kitty.nix @@ -0,0 +1,47 @@ +{ + programs.kitty = { + enable = true; + + settings = { + # Shell + shell = "/etc/profiles/per-user/daniel/bin/fish --interactive"; + shell_integration = "no-cursor"; + + # Theme/Layout + window_padding_width = 3; + tab_title_template = "\"{index}: {title[:25]}\""; + tab_bar_style = "separator"; + tab_separator = "\" ┇ \""; + macos_titlebar_color = "background"; + macos_traditional_fullscreen = true; + macos_show_window_title_in = "window"; + + # UX + kitty_mod = "cmd"; + cursor_blink_interval = 0; + enable_audio_bell = false; + visual_bell_duration = 0; + + # Mouse + detect_urls = false; + allow_hyperlinks = false; + + # Scrollback + scrollback_pager_history_size = 2; + }; + + font = { + name = "JetBrainsMono Nerd Font"; + size = 13; + }; + + extraConfig = '' + include dracula.conf + ''; + }; + + xdg.configFile.kitty = { + source = ../config/kitty; + recursive = true; + }; +} diff --git a/programs/nvim/default.nix b/programs/nvim/default.nix index b9bf7b2..19205ab 100644 --- a/programs/nvim/default.nix +++ b/programs/nvim/default.nix @@ -36,6 +36,7 @@ in extraPackages = with pkgs; [ gcc gnumake + git nodejs-16_x tree-sitter diff --git a/programs/nvim/plugins.nix b/programs/nvim/plugins.nix index ff2006f..6fd1bf6 100644 --- a/programs/nvim/plugins.nix +++ b/programs/nvim/plugins.nix @@ -91,12 +91,12 @@ }; nvim-treesitter = pkgs.vimUtils.buildVimPluginFrom2Nix { pname = "nvim-treesitter"; - version = "1643811536"; + version = "1643912584"; src = pkgs.fetchFromGitHub { owner = "nvim-treesitter"; repo = "nvim-treesitter"; - rev = "c9b11ac70c24a3854998c9a92c94759b1d1b52ef"; - sha256 = "AbLilgMrkzUs/fjshFettSmrdISjBF6nqHVngoynaH8="; + rev = "3cfbde4db05dc9f3f38fcee212849799bb6f2e54"; + sha256 = "HQ9NLHhOQPB6Xcj9G6UqDAWiB0LuDs0iZzRhfyD0XKo="; }; meta.homepage = "https://github.com/nvim-treesitter/nvim-treesitter"; }; @@ -191,12 +191,12 @@ }; null-ls-nvim = pkgs.vimUtils.buildVimPluginFrom2Nix { pname = "null-ls.nvim"; - version = "1643322091"; + version = "1643829703"; src = pkgs.fetchFromGitHub { owner = "jose-elias-alvarez"; repo = "null-ls.nvim"; - rev = "2ae4a5e2e2b35716c44c104ef1afa35ecb40c444"; - sha256 = "55NdHFFmuyoU0ELNnYXvhPGH1iVhyaXkm3zgkNmwO/g="; + rev = "b8bedca6786e975216c073bbd72eb3e76f78e21b"; + sha256 = "WTE78hReuJToqo5ndgPuCe1oTGIoPAdggT9RDnGsruw="; }; meta.homepage = "https://github.com/jose-elias-alvarez/null-ls.nvim"; }; @@ -312,12 +312,12 @@ }; cmp-path = pkgs.vimUtils.buildVimPluginFrom2Nix { pname = "cmp-path"; - version = "1642430705"; + version = "1643823794"; src = pkgs.fetchFromGitHub { owner = "hrsh7th"; repo = "cmp-path"; - rev = "c5230cb439df9547294678d0f1c1465ad7989e5f"; - sha256 = "qKPYOW+Nid3CdFJfeU1JVb9zaDZAk2F/WQ4ddjNDRnk="; + rev = "466b6b8270f7ba89abd59f402c73f63c7331ff6e"; + sha256 = "xYzTpqVKpBBnajqqRRzAXlHAC13VGK1D9mFr3bntepY="; }; meta.homepage = "https://github.com/hrsh7th/cmp-path"; }; @@ -433,12 +433,12 @@ }; undotree = pkgs.vimUtils.buildVimPluginFrom2Nix { pname = "undotree"; - version = "1640333528"; + version = "1643910486"; src = pkgs.fetchFromGitHub { owner = "mbbill"; repo = "undotree"; - rev = "c4984fc6dcc6c4e190f2f8cd5fffb65b0aaa51d2"; - sha256 = "3x01yjy4j7y/SjsUxnI2xOGQxo7GdZsCsBQyqOhK6pk="; + rev = "8a01863a8204b2382ec341d0203c4e9665212221"; + sha256 = "43Yco/5Q2t8lVRQbgeXLpygXga0cKmLfdjvCPCsPDGo="; }; meta.homepage = "https://github.com/mbbill/undotree"; }; @@ -532,12 +532,12 @@ }; nvim-notify = pkgs.vimUtils.buildVimPluginFrom2Nix { pname = "nvim-notify"; - version = "1643665769"; + version = "1643832273"; src = pkgs.fetchFromGitHub { owner = "rcarriga"; repo = "nvim-notify"; - rev = "83ebb5971eaecc0b2c70fb4ed540e87cbf50af6a"; - sha256 = "fGW87jNWO3j1r6cU8OKTb0ggPJQFJXPDDAGAg4ZTdyY="; + rev = "d6f880728da487d0ac4f957835c46b3f2af91fca"; + sha256 = "vI/R92pY+qXaRrg62bcwsdNS1vLpwxrZEj3pO++jdzc="; }; meta.homepage = "https://github.com/rcarriga/nvim-notify"; }; diff --git a/programs/scripts/calculate-nix-path b/programs/scripts/calculate-nix-path deleted file mode 100755 index cbd3885..0000000 --- a/programs/scripts/calculate-nix-path +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/sh - -mkdir -p "$HOME/.cache/fish" - -nix flake metadata "$HOME/.config/nixpkgs" --json 2>/dev/null | \ - jq -r '.locks.nodes.nixpkgs.locked | "\(.type):\(.owner)/\(.repo)/\(.rev)"' | \ - xargs -I {} nix flake metadata {} --json | \ - jq -r '. | "nixpkgs=\(.path)"' >"$HOME/.cache/fish/nix_path_value" diff --git a/programs/scripts/nix-darwin-switch b/programs/scripts/nix-darwin-switch new file mode 100755 index 0000000..7a2c91a --- /dev/null +++ b/programs/scripts/nix-darwin-switch @@ -0,0 +1,13 @@ +#!/usr/bin/env fish + +pushd ~/.config/nixpkgs +rm -rf result + +set system_old (readlink /run/current-system) +env TERM=xterm-256color darwin-rebuild switch --flake . +set system_new (readlink /run/current-system) + +nvd diff "$system_old" "$system_new" + +rm -f result +popd