Migrate to flakes
parent
a24f3cf15b
commit
52f410cb3e
|
@ -1,2 +1,3 @@
|
||||||
result
|
result
|
||||||
*.secret.*
|
*.secret.*
|
||||||
|
.nvimlog
|
10
README.md
10
README.md
|
@ -1,4 +1,12 @@
|
||||||
# dotfiles.nix
|
# dotfiles.nix
|
||||||
|
|
||||||
nix user configuration with home-manager.
|
nix user configuration for nix-darwin and home-manager.
|
||||||
|
|
||||||
|
spiritually a fork of https://github.com/malob/nixpkgs, but using a repo i already had lying around
|
||||||
|
|
||||||
|
## installation
|
||||||
|
```shell
|
||||||
|
$ nix build .#darwinConfigurations.matbook.system
|
||||||
|
$ ./result/sw/bin/darwin-rebuild switch --flake .
|
||||||
|
```
|
||||||
|
|
||||||
|
|
81
Session.vim
81
Session.vim
|
@ -1,81 +0,0 @@
|
||||||
let SessionLoad = 1
|
|
||||||
let s:so_save = &so | let s:siso_save = &siso | set so=0 siso=0
|
|
||||||
let v:this_session=expand("<sfile>:p")
|
|
||||||
silent only
|
|
||||||
cd ~/dotfiles.nix
|
|
||||||
if expand('%') == '' && !&modified && line('$') <= 1 && getline(1) == ''
|
|
||||||
let s:wipebuf = bufnr('%')
|
|
||||||
endif
|
|
||||||
set shortmess=aoO
|
|
||||||
badd +28 home.nix
|
|
||||||
badd +1 assets/i3status.toml
|
|
||||||
badd +66 assets/i3status-cfg
|
|
||||||
argglobal
|
|
||||||
silent! argdel *
|
|
||||||
$argadd home.nix
|
|
||||||
edit assets/i3status-cfg
|
|
||||||
set splitbelow splitright
|
|
||||||
wincmd _ | wincmd |
|
|
||||||
vsplit
|
|
||||||
1wincmd h
|
|
||||||
wincmd w
|
|
||||||
set nosplitright
|
|
||||||
wincmd t
|
|
||||||
set winminheight=0
|
|
||||||
set winheight=1
|
|
||||||
set winminwidth=0
|
|
||||||
set winwidth=1
|
|
||||||
exe 'vert 1resize ' . ((&columns * 66 + 66) / 133)
|
|
||||||
exe 'vert 2resize ' . ((&columns * 66 + 66) / 133)
|
|
||||||
argglobal
|
|
||||||
setlocal fdm=manual
|
|
||||||
setlocal fde=0
|
|
||||||
setlocal fmr={{{,}}}
|
|
||||||
setlocal fdi=#
|
|
||||||
setlocal fdl=0
|
|
||||||
setlocal fml=1
|
|
||||||
setlocal fdn=20
|
|
||||||
setlocal fen
|
|
||||||
silent! normal! zE
|
|
||||||
let s:l = 66 - ((23 * winheight(0) + 14) / 29)
|
|
||||||
if s:l < 1 | let s:l = 1 | endif
|
|
||||||
exe s:l
|
|
||||||
normal! zt
|
|
||||||
66
|
|
||||||
normal! 0
|
|
||||||
wincmd w
|
|
||||||
argglobal
|
|
||||||
if bufexists('assets/i3status.toml') | buffer assets/i3status.toml | else | edit assets/i3status.toml | endif
|
|
||||||
setlocal fdm=manual
|
|
||||||
setlocal fde=0
|
|
||||||
setlocal fmr={{{,}}}
|
|
||||||
setlocal fdi=#
|
|
||||||
setlocal fdl=0
|
|
||||||
setlocal fml=1
|
|
||||||
setlocal fdn=20
|
|
||||||
setlocal fen
|
|
||||||
silent! normal! zE
|
|
||||||
let s:l = 39 - ((26 * winheight(0) + 14) / 29)
|
|
||||||
if s:l < 1 | let s:l = 1 | endif
|
|
||||||
exe s:l
|
|
||||||
normal! zt
|
|
||||||
39
|
|
||||||
normal! 011|
|
|
||||||
wincmd w
|
|
||||||
2wincmd w
|
|
||||||
exe 'vert 1resize ' . ((&columns * 66 + 66) / 133)
|
|
||||||
exe 'vert 2resize ' . ((&columns * 66 + 66) / 133)
|
|
||||||
tabnext 1
|
|
||||||
if exists('s:wipebuf') && getbufvar(s:wipebuf, '&buftype') isnot# 'terminal'
|
|
||||||
silent exe 'bwipe ' . s:wipebuf
|
|
||||||
endif
|
|
||||||
unlet! s:wipebuf
|
|
||||||
set winheight=1 winwidth=20 winminheight=1 winminwidth=1 shortmess=filnxtToOF
|
|
||||||
let s:sx = expand("<sfile>:p:r")."x.vim"
|
|
||||||
if file_readable(s:sx)
|
|
||||||
exe "source " . fnameescape(s:sx)
|
|
||||||
endif
|
|
||||||
let &so = s:so_save | let &siso = s:siso_save
|
|
||||||
doautoall SessionLoadPost
|
|
||||||
unlet SessionLoad
|
|
||||||
" vim: set ft=vim :
|
|
13
cachix.nix
13
cachix.nix
|
@ -1,13 +0,0 @@
|
||||||
# WARN: this file will get overwritten by $ cachix use <name>
|
|
||||||
{ pkgs, lib, ... }:
|
|
||||||
|
|
||||||
let
|
|
||||||
folder = ./cachix;
|
|
||||||
toImport = name: value: folder + ("/" + name);
|
|
||||||
filterCaches = key: value: value == "regular" && lib.hasSuffix ".nix" key;
|
|
||||||
imports = lib.mapAttrsToList toImport
|
|
||||||
(lib.filterAttrs filterCaches (builtins.readDir folder));
|
|
||||||
in {
|
|
||||||
inherit imports;
|
|
||||||
nix.binaryCaches = [ "https://cache.nixos.org/" ];
|
|
||||||
}
|
|
|
@ -0,0 +1,54 @@
|
||||||
|
{ config, pkgs, lib, ... }:
|
||||||
|
{
|
||||||
|
# Nix configuration ------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
nix.binaryCaches = [
|
||||||
|
"https://cache.nixos.org/"
|
||||||
|
];
|
||||||
|
nix.binaryCachePublicKeys = [
|
||||||
|
"cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY="
|
||||||
|
];
|
||||||
|
nix.trustedUsers = [
|
||||||
|
"@admin"
|
||||||
|
];
|
||||||
|
users.nix.configureBuildUsers = true;
|
||||||
|
|
||||||
|
nix.buildCores = 1;
|
||||||
|
nix.maxJobs = 8;
|
||||||
|
|
||||||
|
# Enable experimental nix command and flakes
|
||||||
|
# nix.package = pkgs.nixUnstable;
|
||||||
|
nix.extraOptions = ''
|
||||||
|
auto-optimise-store = true
|
||||||
|
experimental-features = nix-command flakes
|
||||||
|
'' + lib.optionalString (pkgs.system == "aarch64-darwin") ''
|
||||||
|
extra-platforms = x86_64-darwin aarch64-darwin
|
||||||
|
'';
|
||||||
|
|
||||||
|
# Auto upgrade nix package and the daemon service.
|
||||||
|
services.nix-daemon.enable = true;
|
||||||
|
|
||||||
|
# Make Fish the default shell
|
||||||
|
programs.fish.enable = true;
|
||||||
|
programs.fish.useBabelfish = true;
|
||||||
|
programs.fish.babelfishPackage = pkgs.babelfish;
|
||||||
|
# Needed to address bug where $PATH is not properly set for fish:
|
||||||
|
# https://github.com/LnL7/nix-darwin/issues/122
|
||||||
|
programs.fish.shellInit = ''
|
||||||
|
for p in (string split : ${config.environment.systemPath})
|
||||||
|
if not contains $p $fish_user_paths
|
||||||
|
set -g fish_user_paths $fish_user_paths $p
|
||||||
|
end
|
||||||
|
end
|
||||||
|
'';
|
||||||
|
environment.variables.SHELL = "${pkgs.fish}/bin/fish";
|
||||||
|
environment.loginShell = "${pkgs.fish}/bin/fish";
|
||||||
|
|
||||||
|
# Install and setup ZSH to work with nix(-darwin) as well
|
||||||
|
programs.zsh.enable = true;
|
||||||
|
|
||||||
|
# Used for backwards compatibility, please read the changelog before changing.
|
||||||
|
# $ darwin-rebuild changelog
|
||||||
|
system.stateVersion = 4;
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,57 @@
|
||||||
|
{pkgs, lib, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
imports = [
|
||||||
|
./bootstrap.nix
|
||||||
|
./homebrew.nix
|
||||||
|
./macos-defaults.nix
|
||||||
|
];
|
||||||
|
|
||||||
|
# Apps
|
||||||
|
# `home-manager` currently has issues adding them to `~/Applications`
|
||||||
|
# Issue: https://github.com/nix-community/home-manager/issues/1341
|
||||||
|
environment.systemPackages = with pkgs; [
|
||||||
|
# codium
|
||||||
|
# discord
|
||||||
|
# element-desktop
|
||||||
|
# firefox
|
||||||
|
kitty
|
||||||
|
# lagrange
|
||||||
|
# signal-desktop
|
||||||
|
# steam
|
||||||
|
terminal-notifier
|
||||||
|
];
|
||||||
|
|
||||||
|
# https://github.com/nix-community/home-manager/issues/423
|
||||||
|
environment.variables = {
|
||||||
|
TERMINFO_DIRS = "${pkgs.kitty.terminfo.outPath}/share/terminfo";
|
||||||
|
};
|
||||||
|
programs.nix-index.enable = true;
|
||||||
|
|
||||||
|
environment.shells = with pkgs; [
|
||||||
|
bashInteractive
|
||||||
|
fish
|
||||||
|
zsh
|
||||||
|
];
|
||||||
|
# Fonts
|
||||||
|
fonts.enableFontDir = true;
|
||||||
|
fonts.fonts = with pkgs; [
|
||||||
|
recursive
|
||||||
|
(nerdfonts.override {
|
||||||
|
fonts = [
|
||||||
|
"FantasqueSansMono"
|
||||||
|
"JetBrainsMono"
|
||||||
|
"FiraCode"
|
||||||
|
"SourceCodePro"
|
||||||
|
];
|
||||||
|
})
|
||||||
|
];
|
||||||
|
|
||||||
|
# Keyboard
|
||||||
|
# system.keyboard.enableKeyMapping = true;
|
||||||
|
# system.keyboard.remapCapsLockToEscape = true;
|
||||||
|
|
||||||
|
# Add ability to used TouchID for sudo authentication
|
||||||
|
security.pam.enableSudoTouchIdAuth = true;
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,72 @@
|
||||||
|
{ config, lib, pkgs, ... }:
|
||||||
|
|
||||||
|
let
|
||||||
|
inherit (lib) mkIf;
|
||||||
|
mkIfCaskPresent = cask: mkIf (lib.any (x: x == cask) config.homebrew.casks);
|
||||||
|
brewEnabled = config.homebrew.enable;
|
||||||
|
in
|
||||||
|
|
||||||
|
{
|
||||||
|
environment.shellInit = mkIf brewEnabled ''
|
||||||
|
eval "$(${config.homebrew.brewPrefix}/brew shellenv)"
|
||||||
|
'';
|
||||||
|
|
||||||
|
# https://docs.brew.sh/Shell-Completion#configuring-completions-in-fish
|
||||||
|
# For some reason if the Fish completions are added at the end of `fish_complete_path` they don't
|
||||||
|
# seem to work, but they do work if added at the start.
|
||||||
|
programs.fish.interactiveShellInit = mkIf brewEnabled ''
|
||||||
|
if test -d (brew --prefix)"/share/fish/completions"
|
||||||
|
set -p fish_complete_path (brew --prefix)/share/fish/completions
|
||||||
|
end
|
||||||
|
if test -d (brew --prefix)"/share/fish/vendor_completions.d"
|
||||||
|
set -p fish_complete_path (brew --prefix)/share/fish/vendor_completions.d
|
||||||
|
end
|
||||||
|
'';
|
||||||
|
|
||||||
|
homebrew.enable = true;
|
||||||
|
homebrew.autoUpdate = true;
|
||||||
|
homebrew.cleanup = "zap";
|
||||||
|
homebrew.global.brewfile = true;
|
||||||
|
homebrew.global.noLock = true;
|
||||||
|
|
||||||
|
homebrew.taps = [
|
||||||
|
"homebrew/cask"
|
||||||
|
"homebrew/cask-drivers"
|
||||||
|
"homebrew/cask-fonts"
|
||||||
|
"homebrew/cask-versions"
|
||||||
|
"homebrew/core"
|
||||||
|
"homebrew/services"
|
||||||
|
"nrlquaker/createzap"
|
||||||
|
];
|
||||||
|
|
||||||
|
# Prefer installing application from the Mac App Store
|
||||||
|
homebrew.masApps = {
|
||||||
|
Bitwarden = 1352778147;
|
||||||
|
Spark = 1176895641;
|
||||||
|
};
|
||||||
|
|
||||||
|
# If an app isn't available in the Mac App Store, or the version in the App Store has
|
||||||
|
# limitiations, e.g., Transmit, install the Homebrew Cask.
|
||||||
|
homebrew.casks = [
|
||||||
|
"alfred"
|
||||||
|
"discord"
|
||||||
|
"element"
|
||||||
|
"firefox"
|
||||||
|
"gog-galaxy"
|
||||||
|
"knockknock"
|
||||||
|
"lagrange"
|
||||||
|
"lulu"
|
||||||
|
"rectangle"
|
||||||
|
"signal"
|
||||||
|
"steam"
|
||||||
|
"vscodium"
|
||||||
|
];
|
||||||
|
|
||||||
|
# Configuration related to casks
|
||||||
|
environment.variables.SSH_AUTH_SOCK = mkIfCaskPresent "secretive"
|
||||||
|
"/Users/${config.users.primaryUser}/Library/Containers/com.maxgoedjen.Secretive.SecretAgent/Data/socket.ssh";
|
||||||
|
|
||||||
|
# For cli packages that aren't currently available for macOS in `nixpkgs`.Packages should be
|
||||||
|
# installed in `../home/default.nix` whenever possible.
|
||||||
|
homebrew.brews = [];
|
||||||
|
}
|
|
@ -0,0 +1,55 @@
|
||||||
|
{ ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
system.defaults.NSGlobalDomain = {
|
||||||
|
# "com.apple.trackpad.scaling" = "3.0";
|
||||||
|
# AppleInterfaceStyleSwitchesAutomatically = false;
|
||||||
|
# InitialKeyRepeat = 15;
|
||||||
|
# KeyRepeat = 2;
|
||||||
|
NSAutomaticCapitalizationEnabled = false;
|
||||||
|
_HIHideMenuBar = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
# Firewall
|
||||||
|
system.defaults.alf = {
|
||||||
|
globalstate = 1;
|
||||||
|
allowsignedenabled = 1;
|
||||||
|
allowdownloadsignedenabled = 1;
|
||||||
|
stealthenabled = 1;
|
||||||
|
};
|
||||||
|
|
||||||
|
# Dock and Mission Control
|
||||||
|
system.defaults.dock = {
|
||||||
|
autohide = false;
|
||||||
|
expose-group-by-app = false;
|
||||||
|
mru-spaces = false;
|
||||||
|
tilesize = 96;
|
||||||
|
# Disable all hot corners
|
||||||
|
wvous-bl-corner = 1;
|
||||||
|
wvous-br-corner = 1;
|
||||||
|
wvous-tl-corner = 1;
|
||||||
|
wvous-tr-corner = 1;
|
||||||
|
};
|
||||||
|
|
||||||
|
# Finder
|
||||||
|
system.defaults.finder = {
|
||||||
|
AppleShowAllExtensions = true;
|
||||||
|
FXEnableExtensionChangeWarning = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
# Login and lock screen
|
||||||
|
system.defaults.loginwindow = {
|
||||||
|
GuestEnabled = false;
|
||||||
|
DisableConsoleAccess = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
# Spaces
|
||||||
|
system.defaults.spaces.spans-displays = false;
|
||||||
|
|
||||||
|
# Trackpad
|
||||||
|
system.defaults.trackpad = {
|
||||||
|
Clicking = true;
|
||||||
|
TrackpadRightClick = true;
|
||||||
|
TrackpadThreeFingerDrag = true;
|
||||||
|
};
|
||||||
|
}
|
|
@ -0,0 +1,10 @@
|
||||||
|
# See https://nixos.wiki/wiki/Flakes#Using_flakes_project_from_a_legacy_Nix
|
||||||
|
(import (
|
||||||
|
let
|
||||||
|
lock = builtins.fromJSON (builtins.readFile ./flake.lock);
|
||||||
|
in fetchTarball {
|
||||||
|
url = "https://github.com/edolstra/flake-compat/archive/${lock.nodes.flake-compat.locked.rev}.tar.gz";
|
||||||
|
sha256 = lock.nodes.flake-compat.locked.narHash; }
|
||||||
|
) {
|
||||||
|
src = ./.;
|
||||||
|
}).defaultNix
|
|
@ -0,0 +1,120 @@
|
||||||
|
{
|
||||||
|
"nodes": {
|
||||||
|
"darwin": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": [
|
||||||
|
"nixpkgs-unstable"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1642495030,
|
||||||
|
"narHash": "sha256-u1ZlFbLWzkM6zOfuZ1tr0tzTuDWucOYwALPWDWLorkE=",
|
||||||
|
"owner": "lnl7",
|
||||||
|
"repo": "nix-darwin",
|
||||||
|
"rev": "bcdb6022b3a300abf59cb5d0106c158940f5120e",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "lnl7",
|
||||||
|
"ref": "master",
|
||||||
|
"repo": "nix-darwin",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"flake-compat": {
|
||||||
|
"flake": false,
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1641205782,
|
||||||
|
"narHash": "sha256-4jY7RCWUoZ9cKD8co0/4tFARpWB+57+r1bLLvXNJliY=",
|
||||||
|
"owner": "edolstra",
|
||||||
|
"repo": "flake-compat",
|
||||||
|
"rev": "b7547d3eed6f32d06102ead8991ec52ab0a4f1a7",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "edolstra",
|
||||||
|
"repo": "flake-compat",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"flake-utils": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1642700792,
|
||||||
|
"narHash": "sha256-XqHrk7hFb+zBvRg6Ghl+AZDq03ov6OshJLiSWOoX5es=",
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "flake-utils",
|
||||||
|
"rev": "846b2ae0fc4cc943637d3d1def4454213e203cba",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "flake-utils",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"home-manager": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": [
|
||||||
|
"nixpkgs-unstable"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1642882610,
|
||||||
|
"narHash": "sha256-pmdgeJ9v6y+T0UfNQ/Z+Hdv5tPshFFra5JLF/byUA/Y=",
|
||||||
|
"owner": "nix-community",
|
||||||
|
"repo": "home-manager",
|
||||||
|
"rev": "c47c350f6518ed39c2a16e4fadf9137b6c559ddc",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nix-community",
|
||||||
|
"repo": "home-manager",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixpkgs": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1642814097,
|
||||||
|
"narHash": "sha256-4H0Pk/x8eKth06f+mVucLO6saavVEqJVqXprTPfFJiA=",
|
||||||
|
"owner": "nixos",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "fd2624ba104e8b9f9b6b6a7941226b35a58fe41a",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nixos",
|
||||||
|
"ref": "nixpkgs-21.11-darwin",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixpkgs-unstable": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1642791444,
|
||||||
|
"narHash": "sha256-vVKbyx3g2a4oa1jFbmR1O5emQrK+kSf2lfsYu3OhLSI=",
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "f23965369e2d3123b370cc3ba03be835b1e2f5db",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "NixOS",
|
||||||
|
"ref": "nixpkgs-unstable",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"root": {
|
||||||
|
"inputs": {
|
||||||
|
"darwin": "darwin",
|
||||||
|
"flake-compat": "flake-compat",
|
||||||
|
"flake-utils": "flake-utils",
|
||||||
|
"home-manager": "home-manager",
|
||||||
|
"nixpkgs": "nixpkgs",
|
||||||
|
"nixpkgs-unstable": "nixpkgs-unstable"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"root": "root",
|
||||||
|
"version": 7
|
||||||
|
}
|
|
@ -0,0 +1,198 @@
|
||||||
|
{
|
||||||
|
description = "mat's nix configs";
|
||||||
|
|
||||||
|
inputs = {
|
||||||
|
# Package sets
|
||||||
|
nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-21.11-darwin";
|
||||||
|
nixpkgs-unstable.url = github:NixOS/nixpkgs/nixpkgs-unstable;
|
||||||
|
|
||||||
|
# Environment/system management
|
||||||
|
darwin.url = "github:lnl7/nix-darwin/master";
|
||||||
|
darwin.inputs.nixpkgs.follows = "nixpkgs-unstable";
|
||||||
|
home-manager.url = "github:nix-community/home-manager";
|
||||||
|
home-manager.inputs.nixpkgs.follows = "nixpkgs-unstable";
|
||||||
|
|
||||||
|
# Other sources
|
||||||
|
flake-compat = { url = github:edolstra/flake-compat; flake = false; };
|
||||||
|
flake-utils.url = github:numtide/flake-utils;
|
||||||
|
};
|
||||||
|
|
||||||
|
outputs = { self, darwin, nixpkgs, home-manager, flake-utils, ... }@inputs:
|
||||||
|
let
|
||||||
|
|
||||||
|
inherit (darwin.lib) darwinSystem;
|
||||||
|
inherit (inputs.nixpkgs-unstable.lib) attrValues makeOverridable optionalAttrs singleton;
|
||||||
|
|
||||||
|
# Configuration for `nixpkgs`
|
||||||
|
nixpkgsConfig = {
|
||||||
|
config = { allowUnfree = true; };
|
||||||
|
# overlays = attrValues self.overlays;
|
||||||
|
overlays = attrValues self.overlays ++ singleton (
|
||||||
|
# Sub in x86 version of packages that don't build on Apple Silicon yet
|
||||||
|
final: prev: (optionalAttrs (prev.stdenv.system == "aarch64-darwin") {
|
||||||
|
inherit (final.pkgs-x86)
|
||||||
|
# idris2
|
||||||
|
# nix-index
|
||||||
|
# purescript;
|
||||||
|
niv;
|
||||||
|
})
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
# Shared home-manager configs
|
||||||
|
homeManagerStateVersion = "22.05";
|
||||||
|
homeManagerCommonConfig = {
|
||||||
|
imports = attrValues self.homeManagerModules ++ [
|
||||||
|
./home
|
||||||
|
{ home.stateVersion = homeManagerStateVersion; }
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
# Modules shared by most `nix-darwin` personal configurations.
|
||||||
|
nixDarwinCommonModules = attrValues self.darwinModules ++ [
|
||||||
|
# Main `nix-darwin` config
|
||||||
|
./darwin
|
||||||
|
# `home-manager` module
|
||||||
|
home-manager.darwinModules.home-manager
|
||||||
|
(
|
||||||
|
{ config, lib, pkgs, ... }:
|
||||||
|
let
|
||||||
|
inherit (config.users) primaryUser;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
nixpkgs = nixpkgsConfig;
|
||||||
|
# Hack to support legacy worklows that use `<nixpkgs>` etc.
|
||||||
|
nix.nixPath = { nixpkgs = "$HOME/dotfiles.nix/nixpkgs.nix"; };
|
||||||
|
# `home-manager` config
|
||||||
|
users.users.${primaryUser}.home = "/Users/${primaryUser}";
|
||||||
|
home-manager.useGlobalPkgs = true;
|
||||||
|
home-manager.users.${primaryUser} = homeManagerCommonConfig;
|
||||||
|
# Add a registry entry for this flake
|
||||||
|
nix.registry.my.flake = self;
|
||||||
|
}
|
||||||
|
)
|
||||||
|
];
|
||||||
|
in
|
||||||
|
{
|
||||||
|
# `nix-darwin` configs
|
||||||
|
darwinConfigurations = rec {
|
||||||
|
# Mininal configurations to bootstrap systems
|
||||||
|
bootstrap-x86 = makeOverridable darwinSystem {
|
||||||
|
system = "x86_64-darwin";
|
||||||
|
modules = [ ./darwin/bootstrap.nix { nixpkgs = nixpkgsConfig; } ];
|
||||||
|
};
|
||||||
|
bootstrap-arm = bootstrap-x86.override { system = "aarch64-darwin"; };
|
||||||
|
|
||||||
|
# M1 MBP
|
||||||
|
matbook = darwinSystem {
|
||||||
|
system = "aarch64-darwin";
|
||||||
|
modules = nixDarwinCommonModules ++ [
|
||||||
|
{
|
||||||
|
users.primaryUser = "mat";
|
||||||
|
networking.computerName = "matbook pro m1";
|
||||||
|
networking.hostName = "matbook";
|
||||||
|
networking.knownNetworkServices = [
|
||||||
|
"Wi-Fi"
|
||||||
|
];
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
# Config with small modifications needed/desired for CI with GitHub workflow
|
||||||
|
githubCI = darwinSystem {
|
||||||
|
system = "x86_64-darwin";
|
||||||
|
modules = nixDarwinCommonModules ++ [
|
||||||
|
({ lib, ... }: {
|
||||||
|
users.primaryUser = "runner";
|
||||||
|
homebrew.enable = lib.mkForce false;
|
||||||
|
})
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
# Build and activate with `nix build .#cloudVM.activationPackage; ./result/activate`
|
||||||
|
cloudVM = home-manager.lib.homeManagerConfiguration {
|
||||||
|
system = "x86_64-linux";
|
||||||
|
stateVersion = homeManagerStateVersion;
|
||||||
|
homeDirectory = "/home/mat";
|
||||||
|
username = "mat";
|
||||||
|
configuration = {
|
||||||
|
imports = [ homeManagerCommonConfig ];
|
||||||
|
nixpkgs = nixpkgsConfig;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
# attrValues self.darwinModules ++ [
|
||||||
|
# # Main `nix-darwin` config
|
||||||
|
# ./configuration.nix
|
||||||
|
# # `home-manager` module
|
||||||
|
# home-manager.darwinModules.home-manager
|
||||||
|
# {
|
||||||
|
# nixpkgs = nixpkgsConfig;
|
||||||
|
# # `home-manager` config
|
||||||
|
# home-manager.useGlobalPkgs = true;
|
||||||
|
# home-manager.useUserPackages = true;
|
||||||
|
# home-manager.users.mat = import ./home.nix;
|
||||||
|
# }
|
||||||
|
# ];
|
||||||
|
# };
|
||||||
|
};
|
||||||
|
|
||||||
|
# Overlays --------------------------------------------------------------- {{{
|
||||||
|
|
||||||
|
overlays = {
|
||||||
|
# nixpkgs overlays
|
||||||
|
pkgs-stable = final: prev: {
|
||||||
|
pkgs-stable = import inputs.nixpkgs {
|
||||||
|
inherit (prev.stdenv) system;
|
||||||
|
inherit (nixpkgsConfig) config;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
pkgs-unstable = final: prev: {
|
||||||
|
pkgs-unstable = import inputs.nixpkgs-unstable {
|
||||||
|
inherit (prev.stdenv) system;
|
||||||
|
inherit (nixpkgsConfig) config;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
colors = import ./overlays/colors.nix;
|
||||||
|
|
||||||
|
# Overlay useful on Macs with Apple Silicon
|
||||||
|
apple-silicon = final: prev: optionalAttrs (prev.stdenv.system == "aarch64-darwin") {
|
||||||
|
# Add access to x86 packages system is running Apple Silicon
|
||||||
|
pkgs-x86 = import inputs.nixpkgs-unstable {
|
||||||
|
system = "x86_64-darwin";
|
||||||
|
inherit (nixpkgsConfig) config;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
# `nix-darwin` modules (some are pending upstream acceptance)
|
||||||
|
darwinModules = {
|
||||||
|
programs-nix-index = import ./modules/darwin/programs/nix-index.nix;
|
||||||
|
security-pam = import ./modules/darwin/security/pam.nix;
|
||||||
|
users = import ./modules/darwin/users.nix;
|
||||||
|
};
|
||||||
|
|
||||||
|
# home manager configurations
|
||||||
|
homeManagerModules = {
|
||||||
|
# configs-git-aliases = import ./home/configs/git-aliases.nix;
|
||||||
|
# configs-gh-aliases = import ./home/configs/gh-aliases.nix;
|
||||||
|
configs-starship-symbols = import ./home/configs/starship-symbols.nix;
|
||||||
|
programs-neovim-extras = import ./modules/home/programs/neovim/extras.nix;
|
||||||
|
programs-kitty-extras = import ./modules/home/programs/kitty/extras.nix;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // flake-utils.lib.eachDefaultSystem (system: {
|
||||||
|
legacyPackages = import inputs.nixpkgs-unstable {
|
||||||
|
inherit system;
|
||||||
|
inherit (nixpkgsConfig) config;
|
||||||
|
overlays = with self.overlays; [
|
||||||
|
pkgs-unstable
|
||||||
|
pkgs-stable
|
||||||
|
colors
|
||||||
|
apple-silicon
|
||||||
|
];
|
||||||
|
};
|
||||||
|
});
|
||||||
|
}
|
|
@ -0,0 +1,66 @@
|
||||||
|
{ lib, ... }:
|
||||||
|
let inherit (lib) mkDefault; in
|
||||||
|
{
|
||||||
|
programs.starship.settings = {
|
||||||
|
aws.symbol = mkDefault " ";
|
||||||
|
battery.full_symbol = mkDefault "";
|
||||||
|
battery.charging_symbol = mkDefault "";
|
||||||
|
battery.discharging_symbol = mkDefault "";
|
||||||
|
battery.unknown_symbol = mkDefault "";
|
||||||
|
battery.empty_symbol = mkDefault "";
|
||||||
|
cmake.symbol = mkDefault "△ ";
|
||||||
|
conda.symbol = mkDefault " ";
|
||||||
|
crystal.symbol = mkDefault " ";
|
||||||
|
dart.symbol = mkDefault " ";
|
||||||
|
directory.read_only = mkDefault " ";
|
||||||
|
docker_context.symbol = mkDefault " ";
|
||||||
|
dotnet.symbol = mkDefault " ";
|
||||||
|
elixir.symbol = mkDefault " ";
|
||||||
|
elm.symbol = mkDefault " ";
|
||||||
|
erlang.symbol = mkDefault " ";
|
||||||
|
gcloud.symbol = mkDefault " ";
|
||||||
|
git_branch.symbol = mkDefault " ";
|
||||||
|
git_commit.tag_symbol = mkDefault " ";
|
||||||
|
git_status.format = mkDefault "([$all_status$ahead_behind]($style) )";
|
||||||
|
git_status.conflicted = mkDefault " ";
|
||||||
|
git_status.ahead = mkDefault " ";
|
||||||
|
git_status.behind = mkDefault " ";
|
||||||
|
git_status.diverged = mkDefault " ";
|
||||||
|
git_status.untracked = mkDefault " ";
|
||||||
|
git_status.stashed = mkDefault " ";
|
||||||
|
git_status.modified = mkDefault " ";
|
||||||
|
git_status.staged = mkDefault " ";
|
||||||
|
git_status.renamed = mkDefault " ";
|
||||||
|
git_status.deleted = mkDefault " ";
|
||||||
|
golang.symbol = mkDefault " ";
|
||||||
|
helm.symbol = mkDefault "⎈ ";
|
||||||
|
hg_branch.symbol = mkDefault " ";
|
||||||
|
java.symbol = mkDefault " ";
|
||||||
|
julia.symbol = mkDefault " ";
|
||||||
|
kotlin.symbol = mkDefault " ";
|
||||||
|
kubernetes.symbol = mkDefault "☸ ";
|
||||||
|
lua.symbol = mkDefault " ";
|
||||||
|
memory_usage.symbol = mkDefault " ";
|
||||||
|
nim.symbol = mkDefault " ";
|
||||||
|
nix_shell.symbol = mkDefault " ";
|
||||||
|
nodejs.symbol = mkDefault " ";
|
||||||
|
openstack.symbol = mkDefault " ";
|
||||||
|
package.symbol = mkDefault " ";
|
||||||
|
perl.symbol = mkDefault " ";
|
||||||
|
php.symbol = mkDefault " ";
|
||||||
|
purescript.symbol = mkDefault "<≡> ";
|
||||||
|
python.symbol = mkDefault " ";
|
||||||
|
ruby.symbol = mkDefault " ";
|
||||||
|
rust.symbol = mkDefault " ";
|
||||||
|
shlvl.symbol = mkDefault " ";
|
||||||
|
status.symbol = mkDefault " ";
|
||||||
|
status.not_executable_symbol = mkDefault " ";
|
||||||
|
status.not_found_symbol = mkDefault " ";
|
||||||
|
status.sigint_symbol = mkDefault " ";
|
||||||
|
status.signal_symbol = mkDefault " ";
|
||||||
|
swift.symbol = mkDefault " ";
|
||||||
|
terraform.symbol = mkDefault "𝗧 ";
|
||||||
|
vagrant.symbol = mkDefault "𝗩 ";
|
||||||
|
zig.symbol = mkDefault " ";
|
||||||
|
};
|
||||||
|
}
|
|
@ -0,0 +1,132 @@
|
||||||
|
{ config, pkgs, lib, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
# Import config broken out into files
|
||||||
|
imports = [
|
||||||
|
./git.nix
|
||||||
|
./kitty.nix
|
||||||
|
./neovim.nix
|
||||||
|
./shells.nix
|
||||||
|
];
|
||||||
|
|
||||||
|
home.enableNixpkgsReleaseCheck = true;
|
||||||
|
|
||||||
|
# Packages with configuration --------------------------------------------------------------- {{{
|
||||||
|
|
||||||
|
programs = {
|
||||||
|
# fancy shell history
|
||||||
|
# https://rycee.gitlab.io/home-manager/options.html#opt-programs.atuin.enable
|
||||||
|
atuin = {
|
||||||
|
enable = true;
|
||||||
|
settings = {};
|
||||||
|
};
|
||||||
|
# a nicer cat
|
||||||
|
# https://rycee.gitlab.io/home-manager/options.html#opt-programs.bat.enable
|
||||||
|
bat = {
|
||||||
|
enable = true;
|
||||||
|
config = {
|
||||||
|
style = "plain";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
# Direnv, load and unload environment variables depending on the current directory.
|
||||||
|
# https://direnv.net
|
||||||
|
# https://rycee.gitlab.io/home-manager/options.html#opt-programs.direnv.enable
|
||||||
|
direnv = {
|
||||||
|
enable = true;
|
||||||
|
nix-direnv.enable = true;
|
||||||
|
};
|
||||||
|
# Firefox
|
||||||
|
# https://rycee.gitlab.io/home-manager/options.html#opt-programs.firefox.enable
|
||||||
|
# firefox = {
|
||||||
|
# enable = true;
|
||||||
|
# package = pkgs.firefox;
|
||||||
|
# };
|
||||||
|
# Htop
|
||||||
|
# https://rycee.gitlab.io/home-manager/options.html#opt-programs.htop.enable
|
||||||
|
htop = {
|
||||||
|
enable = true;
|
||||||
|
settings = {
|
||||||
|
show_program_path = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
# See `./shells.nix` for more on how this is used.
|
||||||
|
fish = {
|
||||||
|
functions = {
|
||||||
|
set-bat-colors = {
|
||||||
|
body = ''set -xg BAT_THEME "Solarized ($term_background)"'';
|
||||||
|
onVariable = "term_background";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
interactiveShellInit = ''
|
||||||
|
# Init atuin
|
||||||
|
atuin init fish | source
|
||||||
|
bind -M insert -k up _atuin_search
|
||||||
|
bind -M insert \eOA _atuin_search
|
||||||
|
bind -M insert \e\[A _atuin_search
|
||||||
|
# Set `bat` colors based on value of `$term_backdround` when shell starts up.
|
||||||
|
set-bat-colors
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
# }}}
|
||||||
|
|
||||||
|
# Other packages ----------------------------------------------------------------------------- {{{
|
||||||
|
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
# Some basics
|
||||||
|
abduco # lightweight session management
|
||||||
|
bottom # fancy version of `top` with ASCII graphs
|
||||||
|
coreutils
|
||||||
|
curl
|
||||||
|
du-dust # fancy version of `du`
|
||||||
|
exa # fancy version of `ls`
|
||||||
|
fd # fancy version of `find`
|
||||||
|
htop # fancy version of `top`
|
||||||
|
hyperfine # benchmarking tool
|
||||||
|
mosh # wrapper for `ssh` that better and not dropping connections
|
||||||
|
procs # fancy version of `ps`
|
||||||
|
ripgrep # better version of `grep`
|
||||||
|
tealdeer # rust implementation of `tldr`
|
||||||
|
thefuck
|
||||||
|
unrar # extract RAR archives
|
||||||
|
wget
|
||||||
|
xz # extract XZ archives
|
||||||
|
|
||||||
|
# Dev stuff
|
||||||
|
cloc # source code line counter
|
||||||
|
jq
|
||||||
|
|
||||||
|
# Useful nix related tools
|
||||||
|
cachix # adding/managing alternative binary caches hosted by Cachix
|
||||||
|
comma # run software from without installing it
|
||||||
|
niv # easy dependency management for nix projects
|
||||||
|
nixfmt
|
||||||
|
nix-prefetch-git
|
||||||
|
# nodePackages.node2nix
|
||||||
|
|
||||||
|
] ++ lib.optionals stdenv.isDarwin [
|
||||||
|
cocoapods
|
||||||
|
m-cli # useful macOS CLI commands
|
||||||
|
# prefmanager # tool for working with macOS defaults
|
||||||
|
];
|
||||||
|
# }}}
|
||||||
|
|
||||||
|
# Misc configuration files --------------------------------------------------------------------{{{
|
||||||
|
|
||||||
|
# https://docs.haskellstack.org/en/stable/yaml_configuration/#non-project-specific-config
|
||||||
|
# home.file.".stack/config.yaml".text = lib.generators.toYAML {} {
|
||||||
|
# templates = {
|
||||||
|
# scm-init = "git";
|
||||||
|
# params = {
|
||||||
|
# author-name = config.programs.git.userName;
|
||||||
|
# author-email = config.programs.git.userEmail;
|
||||||
|
# github-username = "malob";
|
||||||
|
# };
|
||||||
|
# };
|
||||||
|
# nix.enable = true;
|
||||||
|
# };
|
||||||
|
|
||||||
|
# Stop `parallel` from displaying citation warning
|
||||||
|
# home.file.".parallel/will-cite".text = "";
|
||||||
|
# }}}
|
||||||
|
}
|
|
@ -0,0 +1,31 @@
|
||||||
|
{ pkgs, lib, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
# Git
|
||||||
|
# https://rycee.gitlab.io/home-manager/options.html#opt-programs.git.enable
|
||||||
|
# Aliases config imported in flake.
|
||||||
|
programs.git.enable = true;
|
||||||
|
|
||||||
|
programs.git.extraConfig = {
|
||||||
|
core.editor = "${pkgs.neovim-remote}/bin/nvr --remote-wait-silent -cc split";
|
||||||
|
diff.colorMoved = "default";
|
||||||
|
pull.rebase = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
programs.git.ignores = [
|
||||||
|
".DS_Store"
|
||||||
|
];
|
||||||
|
|
||||||
|
programs.git.userEmail = "mat@mat.services";
|
||||||
|
programs.git.userName = "mat ess";
|
||||||
|
|
||||||
|
# Enhanced diffs
|
||||||
|
programs.git.delta.enable = true;
|
||||||
|
|
||||||
|
|
||||||
|
# GitHub CLI
|
||||||
|
# https://rycee.gitlab.io/home-manager/options.html#opt-programs.gh.enable
|
||||||
|
# Aliases config imported in flake.
|
||||||
|
programs.gh.enable = true;
|
||||||
|
programs.gh.settings.git_protocol = "ssh";
|
||||||
|
}
|
|
@ -0,0 +1,122 @@
|
||||||
|
{ config, lib, pkgs, ... }:
|
||||||
|
# Let-In --------------------------------------------------------------------------------------- {{{
|
||||||
|
let
|
||||||
|
inherit (lib) mkIf;
|
||||||
|
backgroundDependantColors = colors: with colors; {
|
||||||
|
background = "#${base}";
|
||||||
|
foreground = "#${main}";
|
||||||
|
|
||||||
|
# Cursor
|
||||||
|
cursor = "#${blue}";
|
||||||
|
cursor_text_color = "#${base}";
|
||||||
|
|
||||||
|
# Selection
|
||||||
|
selection_background = "#${muted}";
|
||||||
|
selection_foreground = "#${base}";
|
||||||
|
|
||||||
|
# Tab bar
|
||||||
|
tab_bar_background = "#${basehl}";
|
||||||
|
inactive_tab_background = "#${strong}";
|
||||||
|
};
|
||||||
|
in
|
||||||
|
# }}}
|
||||||
|
{
|
||||||
|
# Kitty terminal
|
||||||
|
# https://sw.kovidgoyal.net/kitty/conf.html
|
||||||
|
# https://rycee.gitlab.io/home-manager/options.html#opt-programs.kitty.enable
|
||||||
|
programs.kitty.enable = true;
|
||||||
|
|
||||||
|
# General config ----------------------------------------------------------------------------- {{{
|
||||||
|
|
||||||
|
programs.kitty.settings = {
|
||||||
|
# # https://fsd.it/shop/fonts/pragmatapro/
|
||||||
|
# font_family = "PragmataPro Mono Liga";
|
||||||
|
font_family = "FiraCode Nerd Font";
|
||||||
|
font_size = "14.0";
|
||||||
|
adjust_line_height = "120%";
|
||||||
|
disable_ligatures = "cursor"; # disable ligatures when cursor is on them
|
||||||
|
|
||||||
|
# Window layout
|
||||||
|
hide_window_decorations = "titlebar-only";
|
||||||
|
window_padding_width = "10";
|
||||||
|
|
||||||
|
# Tab bar
|
||||||
|
tab_bar_edge = "top";
|
||||||
|
tab_bar_style = "powerline";
|
||||||
|
tab_title_template = "Tab {index}: {title}";
|
||||||
|
active_tab_font_style = "bold";
|
||||||
|
inactive_tab_font_style = "normal";
|
||||||
|
tab_activity_symbol = "";
|
||||||
|
|
||||||
|
# Shell integration manually enabled for fish
|
||||||
|
shell_integration = "disabled";
|
||||||
|
};
|
||||||
|
|
||||||
|
# Change the style of italic font variants
|
||||||
|
# programs.kitty.extraConfig = ''
|
||||||
|
# font_features PragmataProMonoLiga-Italic +ss06
|
||||||
|
# font_features PragmataProMonoLiga-BoldItalic +ss07
|
||||||
|
# '';
|
||||||
|
|
||||||
|
programs.kitty.extras.useSymbolsFromNerdFont = "FiraCode Nerd Font";
|
||||||
|
# }}}
|
||||||
|
|
||||||
|
# Colors config ------------------------------------------------------------------------------ {{{
|
||||||
|
programs.kitty.extras.colors = with pkgs.lib.colors; {
|
||||||
|
enable = true;
|
||||||
|
|
||||||
|
# Colors that aren't dependent on background
|
||||||
|
common = with pkgs.lib.colors.solarized.colors; {
|
||||||
|
# black
|
||||||
|
color0 = "#${darkBasehl}";
|
||||||
|
color8 = "#${darkBase}";
|
||||||
|
# red
|
||||||
|
color1 = "#${red}";
|
||||||
|
color9 = "#${orange}";
|
||||||
|
# green
|
||||||
|
color2 = "#${green}";
|
||||||
|
color10 = "#${darkestTone}";
|
||||||
|
# yellow
|
||||||
|
color3 = "#${yellow}";
|
||||||
|
color11 = "#${darkTone}";
|
||||||
|
# blue
|
||||||
|
color4 = "#${blue}";
|
||||||
|
color12 = "#${lightTone}";
|
||||||
|
# magenta
|
||||||
|
color5 = "#${magenta}";
|
||||||
|
color13 = "#${violet}";
|
||||||
|
# cyan
|
||||||
|
color6 = "#${cyan}";
|
||||||
|
color14 = "#${lightestTone}";
|
||||||
|
# white
|
||||||
|
color7 = "#${lightBasehl}";
|
||||||
|
color15 = "#${lightBase}";
|
||||||
|
# url underline color to fit colors
|
||||||
|
url_color = "#${blue}";
|
||||||
|
# tab bar
|
||||||
|
active_tab_foreground = "#${lightBase}";
|
||||||
|
active_tab_background = "#${green}";
|
||||||
|
inactive_tab_foreground = "#${lightBase}";
|
||||||
|
};
|
||||||
|
|
||||||
|
# Background dependent colors
|
||||||
|
dark = backgroundDependantColors solarized.dark;
|
||||||
|
light = backgroundDependantColors solarized.light;
|
||||||
|
};
|
||||||
|
|
||||||
|
programs.fish.functions.set-term-colors = {
|
||||||
|
body = "term-background $term_background";
|
||||||
|
onVariable = "term_background";
|
||||||
|
};
|
||||||
|
programs.fish.interactiveShellInit = ''
|
||||||
|
# Set term colors based on value of `$term_background` when shell starts up.
|
||||||
|
set-term-colors
|
||||||
|
# Manually enable shell integration
|
||||||
|
if set -q KITTY_INSTALLATION_DIR
|
||||||
|
set --global KITTY_SHELL_INTEGRATION enabled
|
||||||
|
source "$KITTY_INSTALLATION_DIR/shell-integration/fish/vendor_conf.d/kitty-shell-integration.fish"
|
||||||
|
set --prepend fish_complete_path "$KITTY_INSTALLATION_DIR/shell-integration/fish/vendor_completions.d"
|
||||||
|
end
|
||||||
|
'';
|
||||||
|
# }}}
|
||||||
|
}
|
|
@ -0,0 +1,92 @@
|
||||||
|
{ config, pkgs, lib, ... }:
|
||||||
|
|
||||||
|
let
|
||||||
|
inherit (lib) getName mkIf optional;
|
||||||
|
# inherit (config.lib.file) mkOutOfStoreSymlink;
|
||||||
|
nixConfigDir = "${config.home.homeDirectory}/dotfiles.nix";
|
||||||
|
|
||||||
|
nvr = "${pkgs.neovim-remote}/bin/nvr";
|
||||||
|
|
||||||
|
pluginWithDeps = plugin: deps: plugin.overrideAttrs (_: { dependencies = deps; });
|
||||||
|
|
||||||
|
nonVSCodePlugin = plugin: {
|
||||||
|
plugin = plugin;
|
||||||
|
optional = true;
|
||||||
|
config = ''if !exists('g:vscode') | packadd ${plugin.pname} | endif'';
|
||||||
|
};
|
||||||
|
in
|
||||||
|
|
||||||
|
{
|
||||||
|
# Neovim
|
||||||
|
# https://rycee.gitlab.io/home-manager/options.html#opt-programs.neovim.enable
|
||||||
|
programs.neovim = {
|
||||||
|
enable = true;
|
||||||
|
viAlias = true;
|
||||||
|
vimAlias = true;
|
||||||
|
vimdiffAlias = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
# Config and plugins ------------------------------------------------------------------------- {{{
|
||||||
|
|
||||||
|
# Minimal init.vim config to load Lua config. Nix and Home Manager don't currently support
|
||||||
|
# `init.lua`.
|
||||||
|
# xdg.configFile."nvim/lua".source = mkOutOfStoreSymlink "${nixConfigDir}/configs/nvim/lua";
|
||||||
|
# xdg.configFile."nvim/colors".source = mkOutOfStoreSymlink "${nixConfigDir}/configs/nvim/colors";
|
||||||
|
# programs.neovim.extraConfig = "lua require('init')";
|
||||||
|
|
||||||
|
programs.neovim.plugins = with pkgs.vimPlugins; [
|
||||||
|
tabular
|
||||||
|
vim-commentary
|
||||||
|
vim-surround
|
||||||
|
] ++ map (p: { plugin = p; optional = true; }) [
|
||||||
|
which-key-nvim
|
||||||
|
zoomwintab-vim
|
||||||
|
] ++ map nonVSCodePlugin [
|
||||||
|
direnv-vim
|
||||||
|
vim-fugitive
|
||||||
|
];
|
||||||
|
# }}}
|
||||||
|
|
||||||
|
# Shell related ------------------------------------------------------------------------------ {{{
|
||||||
|
|
||||||
|
# From personal addon module `./modules/programs/neovim/extras.nix`
|
||||||
|
programs.neovim.extras.termBufferAutoChangeDir = true;
|
||||||
|
programs.neovim.extras.nvrAliases.enable = true;
|
||||||
|
|
||||||
|
programs.fish.functions.set-nvim-background = mkIf config.programs.neovim.enable {
|
||||||
|
# See `./shells.nix` for more on how this is used.
|
||||||
|
body = ''
|
||||||
|
# Set `background` of all running Neovim instances base on `$term_background`.
|
||||||
|
for server in (${nvr} --serverlist)
|
||||||
|
${nvr} -s --nostart --servername $server -c "set background=$term_background" &
|
||||||
|
end
|
||||||
|
'';
|
||||||
|
onVariable = "term_background";
|
||||||
|
};
|
||||||
|
|
||||||
|
programs.fish.interactiveShellInit = mkIf config.programs.neovim.enable ''
|
||||||
|
# Run Neovim related functions on init for their effects, and to register them so they are
|
||||||
|
# triggered when the relevant event happens or variable changes.
|
||||||
|
set-nvim-background
|
||||||
|
'';
|
||||||
|
# }}}
|
||||||
|
|
||||||
|
# Required packages -------------------------------------------------------------------------- {{{
|
||||||
|
|
||||||
|
programs.neovim.extraPackages = with pkgs; [
|
||||||
|
neovim-remote
|
||||||
|
gcc # needed for nvim-treesitter
|
||||||
|
tree-sitter # needed for nvim-treesitter
|
||||||
|
|
||||||
|
# Language servers
|
||||||
|
# See `../configs/nvim/lua/init.lua` for configuration.
|
||||||
|
# ccls
|
||||||
|
nodePackages.bash-language-server
|
||||||
|
# nodePackages.typescript-language-server
|
||||||
|
nodePackages.vim-language-server
|
||||||
|
nodePackages.vscode-langservers-extracted
|
||||||
|
nodePackages.yaml-language-server
|
||||||
|
rnix-lsp
|
||||||
|
] ++ optional (pkgs.stdenv.system != "x86_64-darwin") sumneko-lua-language-server;
|
||||||
|
# }}}
|
||||||
|
}
|
|
@ -0,0 +1,210 @@
|
||||||
|
{ config, pkgs, lib, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
# Fish Shell
|
||||||
|
# https://rycee.gitlab.io/home-manager/options.html#opt-programs.fish.enable
|
||||||
|
programs.fish.enable = true;
|
||||||
|
|
||||||
|
# Add Fish plugins
|
||||||
|
home.packages = with pkgs.fishPlugins; [ done ];
|
||||||
|
|
||||||
|
programs.fish.plugins = [
|
||||||
|
{
|
||||||
|
name = "fisher";
|
||||||
|
src = pkgs.fetchFromGitHub {
|
||||||
|
owner = "jorgebucaran";
|
||||||
|
repo = "fisher";
|
||||||
|
rev = "93dafd242b52a0dc6bea54130d0ea041830c7fd6";
|
||||||
|
sha256 = "0qbqlydh7b928473f7c4gy68sr1wnwyhcvvqzcik1vx5hdbka7ad";
|
||||||
|
};
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
home.file = {
|
||||||
|
".config/fish/fish_plugins".text = ''
|
||||||
|
jorgebucaran/fisher
|
||||||
|
jorgebucaran/autopair.fish
|
||||||
|
jorgebucaran/replay.fish
|
||||||
|
jorgebucaran/getopts.fish
|
||||||
|
americanhanko/fish-spin
|
||||||
|
joseluisq/gitnow
|
||||||
|
fishpkg/fish-humanize-duration
|
||||||
|
oh-my-fish/plugin-bang-bang
|
||||||
|
matthewess/fish-autovenv
|
||||||
|
joehillen/to-fish
|
||||||
|
jethrokuan/z
|
||||||
|
decors/fish-colored-man
|
||||||
|
haslersn/fish-nix-completions
|
||||||
|
Gazorby/fish-abbreviation-tips
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
# Fish functions ----------------------------------------------------------------------------- {{{
|
||||||
|
|
||||||
|
programs.fish.functions = {
|
||||||
|
# User functions
|
||||||
|
mkdcd = {
|
||||||
|
argumentNames = [ "target" ];
|
||||||
|
body = ''
|
||||||
|
mkdir $target
|
||||||
|
cd $target
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
unz = {
|
||||||
|
argumentNames = [ "target" ];
|
||||||
|
body = ''
|
||||||
|
# strip extensions
|
||||||
|
string match \*.zip $target; and set target (string split -r -m1 . $target)[1]
|
||||||
|
unzip -d $target $target
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
# Helpers
|
||||||
|
# Toggles `$term_background` between "light" and "dark". Other Fish functions trigger when this
|
||||||
|
# variable changes. We use a universal variable so that all instances of Fish have the same
|
||||||
|
# value for the variable.
|
||||||
|
toggle-background.body = ''
|
||||||
|
if test "$term_background" = light
|
||||||
|
set -U term_background dark
|
||||||
|
else
|
||||||
|
set -U term_background light
|
||||||
|
end
|
||||||
|
'';
|
||||||
|
|
||||||
|
# Set `$term_background` based on whether macOS is light or dark mode. Other Fish functions
|
||||||
|
# trigger when this variable changes. We use a universal variable so that all instances of Fish
|
||||||
|
# have the same value for the variable.
|
||||||
|
set-background-to-macOS.body = ''
|
||||||
|
# Returns 'Dark' if in dark mode fails otherwise.
|
||||||
|
if defaults read -g AppleInterfaceStyle &>/dev/null
|
||||||
|
set -U term_background dark
|
||||||
|
else
|
||||||
|
set -U term_background light
|
||||||
|
end
|
||||||
|
'';
|
||||||
|
|
||||||
|
# Sets Fish Shell to light or dark colorscheme based on `$term_background`.
|
||||||
|
set-shell-colors = {
|
||||||
|
body = ''
|
||||||
|
# Use correct theme for `btm`
|
||||||
|
if test "$term_background" = light
|
||||||
|
alias btm "btm --color default-light"
|
||||||
|
else
|
||||||
|
alias btm "btm --color default"
|
||||||
|
end
|
||||||
|
# Set LS_COLORS
|
||||||
|
set -xg LS_COLORS (${pkgs.vivid}/bin/vivid generate solarized-$term_background)
|
||||||
|
# Set color variables
|
||||||
|
if test "$term_background" = light
|
||||||
|
set emphasized_text brgreen # base01
|
||||||
|
set normal_text bryellow # base00
|
||||||
|
set secondary_text brcyan # base1
|
||||||
|
set background_light white # base2
|
||||||
|
set background brwhite # base3
|
||||||
|
else
|
||||||
|
set emphasized_text brcyan # base1
|
||||||
|
set normal_text brblue # base0
|
||||||
|
set secondary_text brgreen # base01
|
||||||
|
set background_light black # base02
|
||||||
|
set background brblack # base03
|
||||||
|
end
|
||||||
|
# Set Fish colors that change when background changes
|
||||||
|
set -g fish_color_command $emphasized_text --bold # color of commands
|
||||||
|
set -g fish_color_param $normal_text # color of regular command parameters
|
||||||
|
set -g fish_color_comment $secondary_text # color of comments
|
||||||
|
set -g fish_color_autosuggestion $secondary_text # color of autosuggestions
|
||||||
|
set -g fish_pager_color_prefix $emphasized_text --bold # color of the pager prefix string
|
||||||
|
set -g fish_pager_color_description $selection_text # color of the completion description
|
||||||
|
set -g fish_pager_color_selected_prefix $background
|
||||||
|
set -g fish_pager_color_selected_completion $background
|
||||||
|
set -g fish_pager_color_selected_description $background
|
||||||
|
'';
|
||||||
|
onVariable = "term_background";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
# }}}
|
||||||
|
|
||||||
|
# Fish configuration ------------------------------------------------------------------------- {{{
|
||||||
|
|
||||||
|
# Aliases
|
||||||
|
programs.fish.shellAliases =
|
||||||
|
let
|
||||||
|
nixConfigDir = "${config.home.homeDirectory}/dotfiles.nix";
|
||||||
|
in with pkgs; {
|
||||||
|
# My additions
|
||||||
|
code = "codium";
|
||||||
|
# OG
|
||||||
|
# Nix related
|
||||||
|
drb = "darwin-rebuild build --flake ${nixConfigDir}/";
|
||||||
|
drs = "darwin-rebuild switch --flake ${nixConfigDir}/";
|
||||||
|
drc = "codium ${nixConfigDir}";
|
||||||
|
flakeup = "nix flake update --recreate-lock-file ${nixConfigDir}/";
|
||||||
|
nb = "nix build";
|
||||||
|
nd = "nix develop";
|
||||||
|
nf = "nix flake";
|
||||||
|
nr = "nix run";
|
||||||
|
ns = "nix search";
|
||||||
|
|
||||||
|
# Other
|
||||||
|
".." = "cd ..";
|
||||||
|
":q" = "exit";
|
||||||
|
cat = "${bat}/bin/bat";
|
||||||
|
du = "${du-dust}/bin/dust";
|
||||||
|
g = "${gitAndTools.git}/bin/git";
|
||||||
|
la = "ll -a";
|
||||||
|
ll = "ls -l --time-style long-iso --icons";
|
||||||
|
ls = "${exa}/bin/exa";
|
||||||
|
ps = "${procs}/bin/procs";
|
||||||
|
tb = "toggle-background";
|
||||||
|
};
|
||||||
|
|
||||||
|
# Configuration that should be above `loginShellInit` and `interactiveShellInit`.
|
||||||
|
programs.fish.shellInit = ''
|
||||||
|
set -U fish_term24bit 1
|
||||||
|
${lib.optionalString pkgs.stdenv.isDarwin "set-background-to-macOS"}
|
||||||
|
'';
|
||||||
|
|
||||||
|
programs.fish.interactiveShellInit = ''
|
||||||
|
set -g fish_greeting "ヽ(´ᗜ`)ノ welcome ヽ(´ᗜ`)ノ"
|
||||||
|
fish_vi_key_bindings
|
||||||
|
set VIRTUAL_ENV_DISABLE_PROMPT true
|
||||||
|
bind -M insert ! __history_previous_command
|
||||||
|
bind -M insert '$' __history_previous_command_arguments
|
||||||
|
${pkgs.thefuck}/bin/thefuck --alias | source
|
||||||
|
# Run function to set colors that are dependant on `$term_background` and to register them so
|
||||||
|
# they are triggerd when the relevent event happens or variable changes.
|
||||||
|
set-shell-colors
|
||||||
|
# Set Fish colors that aren't dependant the `$term_background`.
|
||||||
|
set -g fish_color_quote cyan # color of commands
|
||||||
|
set -g fish_color_redirection brmagenta # color of IO redirections
|
||||||
|
set -g fish_color_end blue # color of process separators like ';' and '&'
|
||||||
|
set -g fish_color_error red # color of potential errors
|
||||||
|
set -g fish_color_match --reverse # color of highlighted matching parenthesis
|
||||||
|
set -g fish_color_search_match --background=yellow
|
||||||
|
set -g fish_color_selection --reverse # color of selected text (vi mode)
|
||||||
|
set -g fish_color_operator green # color of parameter expansion operators like '*' and '~'
|
||||||
|
set -g fish_color_escape red # color of character escapes like '\n' and and '\x70'
|
||||||
|
set -g fish_color_cancel red # color of the '^C' indicator on a canceled command
|
||||||
|
'';
|
||||||
|
# }}}
|
||||||
|
|
||||||
|
# Starship Prompt
|
||||||
|
# https://rycee.gitlab.io/home-manager/options.html#opt-programs.starship.enable
|
||||||
|
programs.starship.enable = true;
|
||||||
|
|
||||||
|
# Starship settings -------------------------------------------------------------------------- {{{
|
||||||
|
|
||||||
|
programs.starship.settings = {
|
||||||
|
# See docs here: https://starship.rs/config/
|
||||||
|
# Symbols config configured in Flake.
|
||||||
|
|
||||||
|
battery.display.threshold = 25; # display battery information if charge is <= 25%
|
||||||
|
directory.fish_style_pwd_dir_length = 1; # turn on fish directory truncation
|
||||||
|
directory.truncation_length = 2; # number of directories not to truncate
|
||||||
|
gcloud.disabled = true; # annoying to always have on
|
||||||
|
hostname.style = "bold green"; # don't like the default
|
||||||
|
memory_usage.disabled = true; # because it includes cached memory it's reported as full a lot
|
||||||
|
username.style_user = "bold blue"; # don't like the default
|
||||||
|
};
|
||||||
|
# }}}
|
||||||
|
}
|
16
install.sh
16
install.sh
|
@ -1,16 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
machine=$1
|
|
||||||
|
|
||||||
if [[ -z "$machine" ]]; then
|
|
||||||
machine=$(hostname)
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ ! -d "machines/$machine" ]]; then
|
|
||||||
echo "$machine is not a known machine"
|
|
||||||
exit
|
|
||||||
else
|
|
||||||
echo "Linking ./machines/$machine/configuration.nix to /etc/nixos/configuration.nix"
|
|
||||||
fi
|
|
||||||
|
|
||||||
sudo ln -sf $PWD/machines/$machine/configuration.nix /etc/nixos/configuration.nix
|
|
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 23 KiB |
Before Width: | Height: | Size: 68 KiB After Width: | Height: | Size: 68 KiB |
|
@ -0,0 +1,17 @@
|
||||||
|
# Additional configuration for `nix-index` to enable `command-not-found` functionality with Fish.
|
||||||
|
{ config, lib, pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
config = lib.mkIf config.programs.nix-index.enable {
|
||||||
|
programs.fish.interactiveShellInit = ''
|
||||||
|
function __fish_command_not_found_handler --on-event="fish_command_not_found"
|
||||||
|
${if config.programs.fish.useBabelfish then ''
|
||||||
|
command_not_found_handle $argv
|
||||||
|
'' else ''
|
||||||
|
${pkgs.bashInteractive}/bin/bash -c \
|
||||||
|
"source ${config.progams.nix-index.package}/etc/profile.d/command-not-found.sh; command_not_found_handle $argv"
|
||||||
|
''}
|
||||||
|
end
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
}
|
|
@ -0,0 +1,59 @@
|
||||||
|
# Upstream PR: https://github.com/LnL7/nix-darwin/pull/228
|
||||||
|
{ config, lib, pkgs, ... }:
|
||||||
|
|
||||||
|
with lib;
|
||||||
|
|
||||||
|
let
|
||||||
|
cfg = config.security.pam;
|
||||||
|
|
||||||
|
# Implementation Notes
|
||||||
|
#
|
||||||
|
# We don't use `environment.etc` because this would require that the user manually delete
|
||||||
|
# `/etc/pam.d/sudo` which seems unwise given that applying the nix-darwin configuration requires
|
||||||
|
# sudo. We also can't use `system.patchs` since it only runs once, and so won't patch in the
|
||||||
|
# changes again after OS updates (which remove modifications to this file).
|
||||||
|
#
|
||||||
|
# As such, we resort to line addition/deletion in place using `sed`. We add a comment to the
|
||||||
|
# added line that includes the name of the option, to make it easier to identify the line that
|
||||||
|
# should be deleted when the option is disabled.
|
||||||
|
mkSudoTouchIdAuthScript = isEnabled:
|
||||||
|
let
|
||||||
|
file = "/etc/pam.d/sudo";
|
||||||
|
option = "security.pam.enableSudoTouchIdAuth";
|
||||||
|
in ''
|
||||||
|
${if isEnabled then ''
|
||||||
|
# Enable sudo Touch ID authentication, if not already enabled
|
||||||
|
if ! grep 'pam_tid.so' ${file} > /dev/null; then
|
||||||
|
sed -i "" '2i\
|
||||||
|
auth sufficient pam_tid.so # nix-darwin: ${option}
|
||||||
|
' ${file}
|
||||||
|
fi
|
||||||
|
'' else ''
|
||||||
|
# Disable sudo Touch ID authentication, if added by nix-darwin
|
||||||
|
if grep '${option}' ${file} > /dev/null; then
|
||||||
|
sed -i "" '/${option}/d' ${file}
|
||||||
|
fi
|
||||||
|
''}
|
||||||
|
'';
|
||||||
|
in
|
||||||
|
|
||||||
|
{
|
||||||
|
options = {
|
||||||
|
security.pam.enableSudoTouchIdAuth = mkEnableOption ''
|
||||||
|
Enable sudo authentication with Touch ID
|
||||||
|
When enabled, this option adds the following line to /etc/pam.d/sudo:
|
||||||
|
auth sufficient pam_tid.so
|
||||||
|
(Note that macOS resets this file when doing a system update. As such, sudo
|
||||||
|
authentication with Touch ID won't work after a system update until the nix-darwin
|
||||||
|
configuration is reapplied.)
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
config = {
|
||||||
|
system.activationScripts.extraActivation.text = ''
|
||||||
|
# PAM settings
|
||||||
|
echo >&2 "setting up pam..."
|
||||||
|
${mkSudoTouchIdAuthScript cfg.enableSudoTouchIdAuth}
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
}
|
|
@ -0,0 +1,14 @@
|
||||||
|
{ lib, ... }:
|
||||||
|
|
||||||
|
let
|
||||||
|
inherit (lib) mkOption types;
|
||||||
|
in
|
||||||
|
|
||||||
|
{
|
||||||
|
options = {
|
||||||
|
users.primaryUser = mkOption {
|
||||||
|
type = with types; nullOr string;
|
||||||
|
default = null;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
|
@ -0,0 +1,131 @@
|
||||||
|
{ config, lib, pkgs, ... }:
|
||||||
|
|
||||||
|
with lib;
|
||||||
|
|
||||||
|
let
|
||||||
|
|
||||||
|
cfg = config.programs.kitty.extras;
|
||||||
|
|
||||||
|
# Create a Kitty config string from a Nix set
|
||||||
|
setToKittyConfig = with generators; toKeyValue { mkKeyValue = mkKeyValueDefault {} " "; };
|
||||||
|
|
||||||
|
# Write a Nix set representing a kitty config into the Nix store
|
||||||
|
writeKittyConfig = fileName: config: pkgs.writeTextDir "${fileName}" (setToKittyConfig config);
|
||||||
|
|
||||||
|
# Path in Nix store containing light and dark kitty color configs
|
||||||
|
kitty-colors = pkgs.symlinkJoin {
|
||||||
|
name = "kitty-colors";
|
||||||
|
paths = [
|
||||||
|
(writeKittyConfig "dark-colors.conf" cfg.colors.dark)
|
||||||
|
(writeKittyConfig "light-colors.conf" cfg.colors.light)
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
# Shell scripts for changing Kitty colors
|
||||||
|
term-background = pkgs.writeShellScriptBin "term-background" ''
|
||||||
|
# Accepts arguments "light" or "dark". If shell is running in a Kitty window set the colors.
|
||||||
|
if [ -n "$KITTY_WINDOW_ID" ]; then
|
||||||
|
kitty @ --to $KITTY_LISTEN_ON set-colors --all --configured \
|
||||||
|
${kitty-colors}/"$1"-colors.conf &
|
||||||
|
fi
|
||||||
|
'';
|
||||||
|
term-light = pkgs.writeShellScriptBin "term-light" ''
|
||||||
|
${term-background}/bin/term-background light
|
||||||
|
'';
|
||||||
|
term-dark = pkgs.writeShellScriptBin "term-dark" ''
|
||||||
|
${term-background}/bin/term-background dark
|
||||||
|
'';
|
||||||
|
|
||||||
|
in {
|
||||||
|
|
||||||
|
options.programs.kitty.extras = {
|
||||||
|
colors = {
|
||||||
|
enable = mkOption {
|
||||||
|
type = types.bool;
|
||||||
|
default = false;
|
||||||
|
description = ''
|
||||||
|
When enable, commands <command>term-dark</command> and <command>term-light</command> will
|
||||||
|
toggle between your dark and a light colors.
|
||||||
|
<command>term-background</command> which accepts one argument (the value of which should
|
||||||
|
be <literal>dark</literal> or <literal>light</literal>) is also avaible.
|
||||||
|
(Note that the Kitty setting <literal>allow_remote_control = true</literal> is set to
|
||||||
|
enable this functionality.)
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
dark = mkOption {
|
||||||
|
type = with types; attrsOf str;
|
||||||
|
default = {};
|
||||||
|
description = ''
|
||||||
|
Kitty color settings for dark background colorscheme.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
light = mkOption {
|
||||||
|
type = with types; attrsOf str;
|
||||||
|
default = {};
|
||||||
|
description = ''
|
||||||
|
Kitty color settings for light background colorscheme.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
common = mkOption {
|
||||||
|
type = with types; attrsOf str;
|
||||||
|
default = {};
|
||||||
|
description = ''
|
||||||
|
Kitty color settings that the light and dark background colorschemes share.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
default = mkOption {
|
||||||
|
type = types.enum [ "dark" "light" ];
|
||||||
|
default = "dark";
|
||||||
|
description = ''
|
||||||
|
The colorscheme Kitty opens with.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
useSymbolsFromNerdFont = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
default = "";
|
||||||
|
example = "JetBrainsMono Nerd Font";
|
||||||
|
description = ''
|
||||||
|
NerdFont patched fonts frequently suffer from rendering issues in terminals. To mitigate
|
||||||
|
this, we can use a non-NerdFont with Kitty and use the <literal>symbol_map</literal> setting
|
||||||
|
to tell Kitty to only use a NerdFont for NerdFont symbols.
|
||||||
|
Set this option the name of an installed NerdFont (the same name you'd use in the
|
||||||
|
<literal>font_family</literal> setting), to enable this feature.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
config = mkIf config.programs.kitty.enable {
|
||||||
|
|
||||||
|
home.packages = mkIf cfg.colors.enable [
|
||||||
|
term-light
|
||||||
|
term-dark
|
||||||
|
term-background
|
||||||
|
];
|
||||||
|
|
||||||
|
programs.kitty.settings = optionalAttrs cfg.colors.enable (
|
||||||
|
|
||||||
|
cfg.colors.common // cfg.colors.${cfg.colors.default} // {
|
||||||
|
allow_remote_control = "yes";
|
||||||
|
listen_on = "unix:/tmp/mykitty";
|
||||||
|
}
|
||||||
|
|
||||||
|
) // optionalAttrs (cfg.useSymbolsFromNerdFont != "") {
|
||||||
|
|
||||||
|
# https://github.com/ryanoasis/nerd-fonts/wiki/Glyph-Sets-and-Code-Points
|
||||||
|
symbol_map = "U+E5FA-U+E62B,U+E700-U+E7C5,U+F000-U+F2E0,U+E200-U+E2A9,U+F500-U+FD46,U+E300-U+E3EB,U+F400-U+F4A8,U+2665,U+26a1,U+F27C,U+E0A3,U+E0B4-U+E0C8,U+E0CA,U+E0CC-U+E0D2,U+E0D4,U+23FB-U+23FE,U+2B58,U+F300-U+F313,U+E000-U+E00D ${cfg.useSymbolsFromNerdFont}";
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
xdg.configFile."kitty/macos-launch-services-cmdline" =
|
||||||
|
mkIf (pkgs.stdenv.isDarwin && cfg.colors.enable) { text = "--listen-on unix:/tmp/mykitty"; };
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,167 @@
|
||||||
|
{ config, lib, pkgs, ... }:
|
||||||
|
|
||||||
|
with lib;
|
||||||
|
|
||||||
|
let
|
||||||
|
cfg = config.programs.neovim.extras;
|
||||||
|
nvr = "${pkgs.neovim-remote}/bin/nvr";
|
||||||
|
|
||||||
|
shellConfig = with cfg.nvrAliases; ''
|
||||||
|
# START programs.neovim.extras config ----------------------------------------------------------
|
||||||
|
'' + optionalString cfg.termBufferAutoChangeDir ''
|
||||||
|
# If shell is running in a Neovim terminal buffer, set the PWD of the buffer to `$PWD`.
|
||||||
|
if test -n "$NVIM_LISTEN_ADDRESS"; nvim-sync-term-buffer-pwd; end
|
||||||
|
'' + optionalString cfg.nvrAliases.enable ''
|
||||||
|
# Neovim Remote aliases
|
||||||
|
if test -n "$NVIM_LISTEN_ADDRESS"
|
||||||
|
alias ${edit} "${nvr}"
|
||||||
|
alias ${split} "${nvr} -o"
|
||||||
|
alias ${vsplit} "${nvr} -O"
|
||||||
|
alias ${tabedit} "${nvr} --remote-tab"
|
||||||
|
alias ${nvim} "command nvim"
|
||||||
|
alias nvim "echo 'This shell is running in a Neovim termainal buffer. Use \'${nvim}\' to a nested instance of Neovim, otherwise use ${edit}, ${split}, ${vsplit}, or ${tabedit} to open files in the this Neovim instance.'"
|
||||||
|
else
|
||||||
|
alias ${edit} "nvim"
|
||||||
|
end
|
||||||
|
'' + ''
|
||||||
|
# END programs.neovim.extras config ------------------------------------------------------------
|
||||||
|
'';
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.programs.neovim.extras = {
|
||||||
|
termBufferAutoChangeDir = mkOption {
|
||||||
|
type = types.bool;
|
||||||
|
default = false;
|
||||||
|
description = ''
|
||||||
|
When enabled, the <literal>pwd</literal> of terminal buffers in Neovim are automatically
|
||||||
|
updated to match <literal>$PWD</literal> of the shell running inside them.
|
||||||
|
Note that you cannot use this option if you are using
|
||||||
|
<option>programs.neovim.configure</option>, use <option>programs.neovim.extraConfig</option>
|
||||||
|
and <option>programs.neovim.plugins</option> instead.
|
||||||
|
(Currently only works with Fish shell.)
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
nvrAliases = {
|
||||||
|
enable = mkOption {
|
||||||
|
type = types.bool;
|
||||||
|
default = false;
|
||||||
|
description = ''
|
||||||
|
When enabled, shell aliases for helpful Neovim Remote commands are created if the shell is
|
||||||
|
running inside a Neovim terminal buffer. Additionally, running <command>nvim</command>
|
||||||
|
won't open a nested Neovim instance but instead print a message listing the available
|
||||||
|
<command>nvr</command> aliases, as well as the command to run if you actually want to open
|
||||||
|
a nested Neovim instance.
|
||||||
|
Note that you cannot use this option if you are using
|
||||||
|
<option>programs.neovim.configure</option>, use
|
||||||
|
<option>programs.neovim.extraConfig</option> and <option>programs.neovim.plugins</option>
|
||||||
|
instead.
|
||||||
|
(Currently only works with Fish shell.)
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
edit = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
default = "n";
|
||||||
|
description = ''
|
||||||
|
Equivalent to Neovim's <command>:edit</command> command, i.e., running
|
||||||
|
<command>n [file]</command> will open the file in the current window.
|
||||||
|
When not in Neovim this also acts as an alias for <command>nvim</command>.
|
||||||
|
(Alias for <command>nvr</command>.)
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
split = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
default = "ns";
|
||||||
|
description = ''
|
||||||
|
Equivalent to Neovim's <command>:split/command> command.
|
||||||
|
(Alias for <command>nvr -o</command>.)
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
vsplit = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
default = "nv";
|
||||||
|
description = ''
|
||||||
|
Equivalent to Neovim's <command>:vsplit/command> command.
|
||||||
|
(Alias for <command>nvr -O</command>.)
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
tabedit = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
default = "nt";
|
||||||
|
description = ''
|
||||||
|
Equivalent to Neovim's <command>:tabedit</command> command.
|
||||||
|
(Alias for <command>nvr --remote-tab</command>.)
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
nvim = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
default = "neovim";
|
||||||
|
description = ''
|
||||||
|
Opens a nested Neovim instance.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
luaPackages = mkOption {
|
||||||
|
type = with types; listOf package;
|
||||||
|
default = [];
|
||||||
|
example = [ pkgs.luajitPackages.busted pkgs.luajitPackages.luafilesystem ];
|
||||||
|
description = ''
|
||||||
|
Lua packages to make available in Neovim Lua environment.
|
||||||
|
Note that you cannot use this option if you are using
|
||||||
|
<option>programs.neovim.configure</option>, use <option>programs.neovim.extraConfig</option>
|
||||||
|
and <option>programs.neovim.plugins</option> instead.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = mkIf config.programs.neovim.enable {
|
||||||
|
programs.fish.functions.nvim-sync-term-buffer-pwd = mkIf cfg.termBufferAutoChangeDir {
|
||||||
|
body = ''
|
||||||
|
if test -n "$NVIM_LISTEN_ADDRESS"
|
||||||
|
${nvr} -c "let g:term_buffer_pwds.$fish_pid = '$PWD' | call Set_term_buffer_pwd() "
|
||||||
|
end
|
||||||
|
'';
|
||||||
|
onVariable = "PWD";
|
||||||
|
};
|
||||||
|
|
||||||
|
programs.neovim.extraConfig = mkIf cfg.termBufferAutoChangeDir ''
|
||||||
|
" START programs.neovim.extras.termBufferAutoChangeDir config --------------------------------
|
||||||
|
" Dictionary used to track the PWD of terminal buffers. Keys should be PIDs and values are is
|
||||||
|
" PWD of the shell with that PID. These values are updated from the shell using `nvr`.
|
||||||
|
let g:term_buffer_pwds = {}
|
||||||
|
" Function to call to update the PWD of the current terminal buffer.
|
||||||
|
function Set_term_buffer_pwd() abort
|
||||||
|
if &buftype == 'terminal' && exists('g:term_buffer_pwds[b:terminal_job_pid]')
|
||||||
|
execute 'lchd ' . g:term_buffer_pwds[b:terminal_job_pid]
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
" Sometimes the PWD the shell in a terminal buffer will change when in another buffer, so
|
||||||
|
" when entering a terminal buffer we update try to update it's PWD.
|
||||||
|
augroup NvimTermPwd
|
||||||
|
au!
|
||||||
|
au BufEnter * if &buftype == 'terminal' | call Set_term_buffer_pwd() | endif
|
||||||
|
augroup END
|
||||||
|
" END programs.neovim.extras.termBufferAutoChangeDir config ----------------------------------
|
||||||
|
'';
|
||||||
|
|
||||||
|
programs.fish.interactiveShellInit = mkIf
|
||||||
|
(cfg.termBufferAutoChangeDir || cfg.nvrAliases.enable) shellConfig;
|
||||||
|
|
||||||
|
programs.neovim.plugins = lib.singleton (
|
||||||
|
pkgs.vimUtils.buildVimPluginFrom2Nix {
|
||||||
|
name = "lua-env";
|
||||||
|
src = pkgs.linkFarm "neovim-lua-env" (
|
||||||
|
lib.forEach cfg.luaPackages (
|
||||||
|
p: { name = "lua"; path = "${p}/lib/lua/${p.lua.luaversion}"; }
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
};
|
||||||
|
}
|
|
@ -0,0 +1,7 @@
|
||||||
|
{
|
||||||
|
system ? builtins.currentSystem,
|
||||||
|
config ? {},
|
||||||
|
overlays ? [],
|
||||||
|
...
|
||||||
|
}@args:
|
||||||
|
import (import ./default.nix).inputs.nixpkgs-unstable args
|
|
@ -0,0 +1,72 @@
|
||||||
|
# Colors from: https://ethanschoonover.com/solarized
|
||||||
|
# Used in Kitty terminal config: `./kitty-configs.nix`
|
||||||
|
|
||||||
|
# SOLARIZED HEX 16/8 TERMCOL XTERM/HEX L*A*B RGB HSB
|
||||||
|
# --------- ------- ---- ------- ----------- ---------- ----------- -----------
|
||||||
|
# base03 #002b36 8/4 brblack 234 #1c1c1c 15 -12 -12 0 43 54 193 100 21
|
||||||
|
# base02 #073642 0/4 black 235 #262626 20 -12 -12 7 54 66 192 90 26
|
||||||
|
# base01 #586e75 10/7 brgreen 240 #585858 45 -07 -07 88 110 117 194 25 46
|
||||||
|
# base00 #657b83 11/7 bryellow 241 #626262 50 -07 -07 101 123 131 195 23 51
|
||||||
|
# base0 #839496 12/6 brblue 244 #808080 60 -06 -03 131 148 150 186 13 59
|
||||||
|
# base1 #93a1a1 14/4 brcyan 245 #8a8a8a 65 -05 -02 147 161 161 180 9 63
|
||||||
|
# base2 #eee8d5 7/7 white 254 #e4e4e4 92 -00 10 238 232 213 44 11 93
|
||||||
|
# base3 #fdf6e3 15/7 brwhite 230 #ffffd7 97 00 10 253 246 227 44 10 99
|
||||||
|
# yellow #b58900 3/3 yellow 136 #af8700 60 10 65 181 137 0 45 100 71
|
||||||
|
# orange #cb4b16 9/3 brred 166 #d75f00 50 50 55 203 75 22 18 89 80
|
||||||
|
# red #dc322f 1/1 red 160 #d70000 50 65 45 220 50 47 1 79 86
|
||||||
|
# magenta #d33682 5/5 magenta 125 #af005f 50 65 -05 211 54 130 331 74 83
|
||||||
|
# violet #6c71c4 13/5 brmagenta 61 #5f5faf 50 15 -45 108 113 196 237 45 77
|
||||||
|
# blue #268bd2 4/4 blue 33 #0087ff 55 -10 -45 38 139 210 205 82 82
|
||||||
|
# cyan #2aa198 6/6 cyan 37 #00afaf 60 -35 -05 42 161 152 175 74 63
|
||||||
|
# green #859900 2/2 green 64 #5f8700 60 -20 65 133 153 0 68 100 60
|
||||||
|
|
||||||
|
final: prev: {
|
||||||
|
lib = prev.lib // {
|
||||||
|
colors = {
|
||||||
|
solarized = rec {
|
||||||
|
colors = {
|
||||||
|
darkBase = "002b36"; # base03
|
||||||
|
darkBasehl = "073642"; # base02
|
||||||
|
darkestTone = "586e75"; # base01
|
||||||
|
darkTone = "657b83"; # base00
|
||||||
|
lightTone = "839496"; # base0
|
||||||
|
lightestTone = "93a1a1"; # base1
|
||||||
|
lightBasehl = "eee8d5"; # base2
|
||||||
|
lightBase = "fdf6e3"; # base3
|
||||||
|
yellow = "b58900";
|
||||||
|
orange = "cb4b16";
|
||||||
|
red = "dc322f";
|
||||||
|
magenta = "d33682";
|
||||||
|
violet = "6c71c4";
|
||||||
|
blue = "268bd2";
|
||||||
|
cyan = "2aa198";
|
||||||
|
green = "859900";
|
||||||
|
};
|
||||||
|
|
||||||
|
light = with colors; {
|
||||||
|
base = lightBase;
|
||||||
|
basehl = lightBasehl;
|
||||||
|
invbase = darkBase;
|
||||||
|
invbasehl = darkBasehl;
|
||||||
|
main = darkTone;
|
||||||
|
faded = lightTone;
|
||||||
|
muted = lightestTone;
|
||||||
|
strong = darkestTone;
|
||||||
|
inherit (colors) yellow orange red megenta violet blue cyan green;
|
||||||
|
};
|
||||||
|
|
||||||
|
dark = with colors; {
|
||||||
|
base = darkBase;
|
||||||
|
basehl = darkBasehl;
|
||||||
|
invbase = lightBase;
|
||||||
|
invbasehl = lightBasehl;
|
||||||
|
main = lightTone;
|
||||||
|
faded = darkTone;
|
||||||
|
muted = darkestTone;
|
||||||
|
strong = lightestTone;
|
||||||
|
inherit (colors) yellow orange red megenta violet blue cyan green;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
|
@ -1,7 +0,0 @@
|
||||||
{ config, pkgs, ... }:
|
|
||||||
|
|
||||||
{
|
|
||||||
|
|
||||||
imports = [ ./common.nix ./local.nix ];
|
|
||||||
|
|
||||||
}
|
|
Loading…
Reference in New Issue