Migrate to flakes
parent
a24f3cf15b
commit
52f410cb3e
|
@ -1,2 +1,3 @@
|
|||
result
|
||||
*.secret.*
|
||||
.nvimlog
|
10
README.md
10
README.md
|
@ -1,4 +1,12 @@
|
|||
# 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