Compare commits
No commits in common. "main" and "mybookmark" have entirely different histories.
main
...
mybookmark
48 changed files with 5327 additions and 1385 deletions
README.md
common
files
flake.lockflake.nixhome
common
atuin.nixdefault.nixdevel.nixfish.nixghostty.nixgnome.nix
nvim
tmux.nixutils.nixvcs.nixwezterm.nixdln
lsjostro
hosts
justfileoverlays
pkgs
32
README.md
32
README.md
|
@ -1,3 +1,31 @@
|
|||
# Configuration and various sundries
|
||||
# NixOS Config
|
||||
|
||||
IT in a box.
|
||||
IT in a box!
|
||||
|
||||
## Bootstrapping from a fresh NixOS installation
|
||||
|
||||
1. Install NixOS
|
||||
2. Clone this repo:
|
||||
|
||||
```
|
||||
nix-shell -p git --command 'git clone https://patagia.dev/dln/nixos-config.git'
|
||||
```
|
||||
|
||||
3. Ensure host configuration exists at `./nixos-config/hosts/${HOSTNAME}` and contains at minimum the hardware configuration. The NixOS installer will write this out to `/etc/nixos/hardware-configuration.nix`.
|
||||
4. Apply configuration:
|
||||
```
|
||||
sudo nixos-rebuild boot --flake ./nixos-config#${HOSTNAME}
|
||||
```
|
||||
|
||||
## Use
|
||||
|
||||
1. Clone this repo somewhere convenient, like `~/src/shelman/nixos-config`
|
||||
2. Apply configuration: `just switch`
|
||||
|
||||
## Update
|
||||
|
||||
Update nixpkgs and switch: `just update`
|
||||
|
||||
# Home Manager
|
||||
|
||||
`just home-switch`
|
||||
|
|
|
@ -51,18 +51,6 @@
|
|||
'';
|
||||
};
|
||||
|
||||
services.avahi = {
|
||||
nssmdns4 = true;
|
||||
enable = true;
|
||||
ipv4 = true;
|
||||
ipv6 = true;
|
||||
publish = {
|
||||
enable = true;
|
||||
addresses = true;
|
||||
workstation = true;
|
||||
};
|
||||
};
|
||||
|
||||
# Open ports in the firewall.
|
||||
# networking.firewall.allowedTCPPorts = [ ... ];
|
||||
# networking.firewall.allowedUDPPorts = [ ... ];
|
||||
|
|
|
@ -16,30 +16,31 @@ in
|
|||
environment.systemPackages = with pkgs; [ gnome-ssh-askpass4 ];
|
||||
|
||||
# Excluding some GNOME applications from the default install
|
||||
environment.gnome.excludePackages = (
|
||||
with pkgs;
|
||||
[
|
||||
environment.gnome.excludePackages =
|
||||
(with pkgs; [
|
||||
gnome-connections
|
||||
gnome-photos
|
||||
gnome-tour
|
||||
snapshot
|
||||
])
|
||||
++ (with pkgs; [
|
||||
atomix # puzzle game
|
||||
baobab # disk usage analyzer
|
||||
cheese # webcam tool
|
||||
epiphany # web browser
|
||||
geary # email reader
|
||||
gnome-clocks
|
||||
gnome-connections
|
||||
gnome-contacts
|
||||
gnome-disk-utility
|
||||
gnome-logs
|
||||
gnome-music
|
||||
gnome-photos
|
||||
gnome-terminal
|
||||
gnome-tour
|
||||
snapshot
|
||||
hitori # sudoku game
|
||||
iagno # go game
|
||||
simple-scan
|
||||
tali # poker game
|
||||
yelp # help viewer
|
||||
]
|
||||
);
|
||||
]);
|
||||
|
||||
fonts = {
|
||||
fontDir.enable = true;
|
||||
|
@ -47,26 +48,27 @@ in
|
|||
allowBitmaps = false;
|
||||
antialias = true;
|
||||
defaultFonts = {
|
||||
monospace = [ "Berkeley Mono" ];
|
||||
serif = [ "Liberation Serif" ];
|
||||
sansSerif = [ "Inter" ];
|
||||
};
|
||||
hinting.enable = true;
|
||||
hinting.style = "slight";
|
||||
subpixel.rgba = "rgb";
|
||||
};
|
||||
packages = with pkgs; [
|
||||
inter
|
||||
jetbrains-mono
|
||||
liberation_ttf
|
||||
monaspace
|
||||
nerd-fonts.symbols-only
|
||||
(pkgs.nerdfonts.override { fonts = [ "JetBrainsMono" ]; })
|
||||
noto-fonts
|
||||
noto-fonts-cjk-sans
|
||||
noto-fonts-color-emoji
|
||||
roboto
|
||||
ubuntu_font_family
|
||||
];
|
||||
};
|
||||
|
||||
programs.ssh.enableAskPassword = true;
|
||||
programs.ssh.askPassword = "${pkgs.gnome-ssh-askpass4}/bin/gnome-ssh-askpass4";
|
||||
programs.ssh.startAgent = true;
|
||||
|
||||
|
@ -92,7 +94,7 @@ in
|
|||
xkb.variant = "us";
|
||||
};
|
||||
|
||||
services.pulseaudio.enable = false;
|
||||
hardware.pulseaudio.enable = false;
|
||||
security.rtkit.enable = true;
|
||||
services.pipewire = {
|
||||
enable = true;
|
||||
|
|
|
@ -7,11 +7,12 @@
|
|||
|
||||
let
|
||||
inherit (lib) mkIf mkEnableOption;
|
||||
cfg = config.patagia.podman;
|
||||
in
|
||||
{
|
||||
options.patagia.laptop.enable = mkEnableOption "Laptop tools and configuration";
|
||||
|
||||
config = mkIf config.patagia.laptop.enable {
|
||||
config = mkIf cfg.enable {
|
||||
environment.systemPackages = with pkgs; [ gnomeExtensions.battery-health-charging ];
|
||||
|
||||
services.fprintd.enable = true;
|
||||
|
|
|
@ -20,7 +20,8 @@
|
|||
# Workaround for https://github.com/NixOS/nix/issues/9574
|
||||
nix-path = config.nix.nixPath;
|
||||
substituters = [
|
||||
"https://cache-nixos-org.aarn.patagia.net/"
|
||||
# "https://cache-nixos-org.aarn.shelman.io"
|
||||
"https://cache.nixos.org/"
|
||||
];
|
||||
trusted-public-keys = [ "cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY=" ];
|
||||
extra-substituters = [
|
||||
|
|
|
@ -12,7 +12,7 @@ set fish_emoji_width 2
|
|||
# Colors
|
||||
set fish_color_command --bold
|
||||
set fish_color_comment --italics --dim
|
||||
set fish_color_autosuggestion 1f67f9 --italics --bold
|
||||
set fish_color_autosuggestion --italics --bold red
|
||||
set fish_color_cancel
|
||||
set fish_color_command --bold
|
||||
set fish_color_comment --italics --dim
|
||||
|
@ -36,7 +36,7 @@ set fish_color_redirection
|
|||
set fish_color_search_match -r
|
||||
set fish_color_selection -r
|
||||
set fish_color_status normal
|
||||
set fish_color_string normal
|
||||
set fish_color_string --italics
|
||||
set fish_color_user normal
|
||||
set fish_color_valid_path
|
||||
set fish_pager_color_background
|
||||
|
|
37
files/config/fish/go-task.fish
Normal file
37
files/config/fish/go-task.fish
Normal file
|
@ -0,0 +1,37 @@
|
|||
set GO_TASK_PROGNAME task
|
||||
|
||||
function __task_get_tasks --description "Prints all available tasks with their description"
|
||||
# Read the list of tasks (and potential errors)
|
||||
$GO_TASK_PROGNAME --list-all 2>&1 | read -lz rawOutput
|
||||
|
||||
# Return on non-zero exit code (for cases when there is no Taskfile found or etc.)
|
||||
if test $status -ne 0
|
||||
return
|
||||
end
|
||||
|
||||
# Grab names and descriptions (if any) of the tasks
|
||||
set -l output (echo $rawOutput | sed -e '1d; s/\* \(.*\):\s*\(.*\)\s*(aliases.*/\1\t\2/' -e 's/\* \(.*\):\s*\(.*\)/\1\t\2/'| string split0)
|
||||
if test $output
|
||||
echo $output
|
||||
end
|
||||
end
|
||||
|
||||
complete -c $GO_TASK_PROGNAME -d 'Runs the specified task(s). Falls back to the "default" task if no task name was specified, or lists all tasks if an unknown task name was
|
||||
specified.' -xa "(__task_get_tasks)"
|
||||
|
||||
complete -c $GO_TASK_PROGNAME -s c -l color -d 'colored output (default true)'
|
||||
complete -c $GO_TASK_PROGNAME -s d -l dir -d 'sets directory of execution'
|
||||
complete -c $GO_TASK_PROGNAME -l dry -d 'compiles and prints tasks in the order that they would be run, without executing them'
|
||||
complete -c $GO_TASK_PROGNAME -s f -l force -d 'forces execution even when the task is up-to-date'
|
||||
complete -c $GO_TASK_PROGNAME -s h -l help -d 'shows Task usage'
|
||||
complete -c $GO_TASK_PROGNAME -s i -l init -d 'creates a new Taskfile.yml in the current folder'
|
||||
complete -c $GO_TASK_PROGNAME -s l -l list -d 'lists tasks with description of current Taskfile'
|
||||
complete -c $GO_TASK_PROGNAME -s o -l output -d 'sets output style: [interleaved|group|prefixed]' -xa "interleaved group prefixed"
|
||||
complete -c $GO_TASK_PROGNAME -s p -l parallel -d 'executes tasks provided on command line in parallel'
|
||||
complete -c $GO_TASK_PROGNAME -s s -l silent -d 'disables echoing'
|
||||
complete -c $GO_TASK_PROGNAME -l status -d 'exits with non-zero exit code if any of the given tasks is not up-to-date'
|
||||
complete -c $GO_TASK_PROGNAME -l summary -d 'show summary about a task'
|
||||
complete -c $GO_TASK_PROGNAME -s t -l taskfile -d 'choose which Taskfile to run. Defaults to "Taskfile.yml"'
|
||||
complete -c $GO_TASK_PROGNAME -s v -l verbose -d 'enables verbose mode'
|
||||
complete -c $GO_TASK_PROGNAME -l version -d 'show Task version'
|
||||
complete -c $GO_TASK_PROGNAME -s w -l watch -d 'enables watch of the given task'
|
338
files/config/fish/jj.fish
Normal file
338
files/config/fish/jj.fish
Normal file
|
@ -0,0 +1,338 @@
|
|||
# TODO: passthru other args? E.g.. --at-operation, --repository
|
||||
function __jj
|
||||
command jj --ignore-working-copy --color=never --quiet $argv 2>/dev/null
|
||||
end
|
||||
|
||||
# Aliases
|
||||
# Based on https://github.com/fish-shell/fish-shell/blob/cd71359c42f633d9d71a63591ae16d150407a2b2/share/completions/git.fish#L625.
|
||||
#
|
||||
# Aliases are stored in global variables.
|
||||
# `__jj_aliases` is a list of all aliases and `__jj_alias_$alias` is the command line for the alias.
|
||||
function __jj_add_alias
|
||||
set -l alias $argv[1]
|
||||
set -l alias_escaped (string escape --style=var -- $alias)
|
||||
set -g __jj_alias_$alias_escaped $argv
|
||||
set --append -g __jj_aliases $alias
|
||||
end
|
||||
|
||||
__jj config list aliases -T 'concat(name, "\t", value, "\n")' --include-defaults | while read -l config_alias
|
||||
set -l parsed (string match --regex '^aliases\.(.+)\t(.*)$' --groups-only -- $config_alias)
|
||||
set -l alias $parsed[1]
|
||||
set -l command $parsed[2]
|
||||
set -l args $alias
|
||||
# Replace wrapping `[]` if any
|
||||
set -l command (string replace -r --all '^\[|]$' "" -- $command)
|
||||
while test (string length -- $command) -gt 0
|
||||
set -l parsed (string match -r '^"((?:\\\"|[^"])*?)"(?:,\s)?(.*)$' --groups-only -- $command)
|
||||
set --append args $parsed[1]
|
||||
set command $parsed[2]
|
||||
end
|
||||
__jj_add_alias $args
|
||||
end
|
||||
|
||||
__jj_add_alias ci commit
|
||||
__jj_add_alias desc describe
|
||||
__jj_add_alias op operation
|
||||
__jj_add_alias st status
|
||||
|
||||
# Resolve aliases that call another alias.
|
||||
for alias in $__jj_aliases
|
||||
set -l handled $alias
|
||||
|
||||
while true
|
||||
set -l alias_escaped (string escape --style=var -- $alias)
|
||||
set -l alias_varname __jj_alias_$alias_escaped
|
||||
set -l aliased_command $$alias_varname[1][2]
|
||||
set -l aliased_escaped (string escape --style=var -- $aliased_command)
|
||||
set -l aliased_varname __jj_alias_$aliased_escaped
|
||||
set -q $aliased_varname
|
||||
or break
|
||||
|
||||
# Prevent infinite recursion
|
||||
contains $aliased_escaped $handled
|
||||
and break
|
||||
|
||||
# Expand alias in cmdline
|
||||
set -l aliased_cmdline $$aliased_varname[1][2..-1]
|
||||
set --append aliased_cmdline $$alias_varname[1][3..-1]
|
||||
set -g $alias_varname $$alias_varname[1][1] $aliased_cmdline
|
||||
set --append handled $aliased_escaped
|
||||
end
|
||||
end
|
||||
|
||||
function __jj_aliases_with_descriptions
|
||||
for alias in $__jj_aliases
|
||||
set -l alias_escaped (string escape --style=var -- $alias)
|
||||
set -l alias_varname __jj_alias_$alias_escaped
|
||||
set -l aliased_cmdline (string join " " -- $$alias_varname[1][2..-1] | string replace -r --all '\\\"' '"')
|
||||
printf "%s\talias: %s\n" $alias $aliased_cmdline
|
||||
end
|
||||
end
|
||||
|
||||
# Based on https://github.com/fish-shell/fish-shell/blob/2d4e42ee93327b9cfd554a0d809f85e3d371e70e/share/functions/__fish_seen_subcommand_from.fish.
|
||||
# Test to see if we've seen a subcommand from a list.
|
||||
# This logic may seem backwards, but the commandline will often be much shorter than the list.
|
||||
function __jj_seen_subcommand_from
|
||||
set -l cmd (commandline -opc)
|
||||
set -e cmd[1]
|
||||
|
||||
# Check command line arguments first.
|
||||
for i in $cmd
|
||||
if contains -- $i $argv
|
||||
return 0
|
||||
end
|
||||
end
|
||||
|
||||
# Check aliases.
|
||||
set -l alias $cmd[1]
|
||||
set -l alias_escaped (string escape --style=var -- $alias)
|
||||
set -l varname __jj_alias_$alias_escaped
|
||||
set -q $varname
|
||||
or return 1
|
||||
|
||||
for i in $$varname[1][2..-1]
|
||||
if contains -- $i $argv
|
||||
return 0
|
||||
end
|
||||
end
|
||||
|
||||
return 1
|
||||
end
|
||||
|
||||
function __jj_changes
|
||||
__jj log --no-graph --limit 1000 -r $argv[1] \
|
||||
-T 'separate("\t", change_id.shortest(), if(description, description.first_line(), "(no description set)")) ++ "\n"'
|
||||
end
|
||||
|
||||
function __jj_bookmarks
|
||||
set -f filter $argv[1]
|
||||
if string length --quiet -- $argv[2]
|
||||
__jj bookmark list --all-remotes -r "$argv[2]" \
|
||||
-T "if($filter, name ++ if(remote, \"@\" ++ remote) ++ \"\t\" ++ if(normal_target, normal_target.change_id().shortest() ++ \": \" ++ if(normal_target.description(), normal_target.description().first_line(), \"(no description set)\"), \"(conflicted bookmark)\") ++ \"\n\")"
|
||||
else
|
||||
__jj bookmark list --all-remotes \
|
||||
-T "if($filter, name ++ if(remote, \"@\" ++ remote) ++ \"\t\" ++ if(normal_target, normal_target.change_id().shortest() ++ \": \" ++ if(normal_target.description(), normal_target.description().first_line(), \"(no description set)\"), \"(conflicted bookmark)\") ++ \"\n\")"
|
||||
end
|
||||
end
|
||||
|
||||
function __jj_all_bookmarks
|
||||
__jj_bookmarks '!remote || !remote.starts_with("git")' $argv[1]
|
||||
end
|
||||
|
||||
function __jj_local_bookmarks
|
||||
__jj_bookmarks '!remote' ''
|
||||
end
|
||||
|
||||
function __jj_remote_bookmarks
|
||||
__jj_bookmarks 'remote && !remote.starts_with("git")' ''
|
||||
end
|
||||
|
||||
function __jj_all_changes
|
||||
if string length --quiet -- $argv[1]
|
||||
set -f REV $argv[1]
|
||||
else
|
||||
set -f REV "all()"
|
||||
end
|
||||
__jj_changes $REV
|
||||
__jj_all_bookmarks $REV
|
||||
end
|
||||
|
||||
function __jj_mutable_changes
|
||||
set -f REV "mutable()"
|
||||
__jj_changes $REV
|
||||
__jj_all_bookmarks $REV
|
||||
end
|
||||
|
||||
function __jj_revision_modified_files
|
||||
if test $argv[1] = "@"
|
||||
set -f suffix ""
|
||||
else
|
||||
set -l change_id (__jj log --no-graph --limit 1 -T 'change_id.shortest()')
|
||||
set -f suffix " in $change_id"
|
||||
end
|
||||
|
||||
__jj diff -r $argv[1] --summary | while read -l line
|
||||
set -l file (string split " " -m 1 -- $line)
|
||||
switch $file[1]
|
||||
case M
|
||||
set -f change Modified
|
||||
case D
|
||||
set -f change Deleted
|
||||
case A
|
||||
set -f change Added
|
||||
end
|
||||
printf "%s\t%s%s\n" $file[2] $change $suffix
|
||||
end
|
||||
end
|
||||
|
||||
function __jj_remotes
|
||||
__jj git remote list | while read -l remote
|
||||
printf "%s\t%s\n" (string split " " -m 1 -- $remote)
|
||||
end
|
||||
end
|
||||
|
||||
function __jj_operations
|
||||
__jj operation log --no-graph --limit 1000 -T 'separate("\t", id.short(), description) ++ "\n"'
|
||||
end
|
||||
|
||||
function __jj_parse_revision
|
||||
set -l cmd (commandline -opc)
|
||||
set -e cmd[1]
|
||||
set -l return_next false
|
||||
set -l return_value 1
|
||||
|
||||
# Check aliases.
|
||||
set -l alias $cmd[1]
|
||||
set -l alias_escaped (string escape --style=var -- $alias)
|
||||
set -l varname __jj_alias_$alias_escaped
|
||||
|
||||
if set -q $varname
|
||||
set cmd $$varname[1][2..-1] $cmd[2..-1]
|
||||
end
|
||||
|
||||
# Check command line arguments first.
|
||||
for i in $cmd
|
||||
if $return_next
|
||||
echo $i
|
||||
set return_value 0
|
||||
else if contains -- $i -r --revision --from
|
||||
set return_next true
|
||||
else
|
||||
set -l match (string match --regex '^(?:-r=?|--revision=|--from=)(.+)\s*$' --groups-only -- $i)
|
||||
if set -q match[1]
|
||||
echo $match[1]
|
||||
set return_value 0
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
return $return_value
|
||||
end
|
||||
|
||||
function __jj_revision_files
|
||||
set -l description (__jj log --no-graph --limit 1 -r $argv[1] -T 'change_id.shortest() ++ ": " ++ coalesce(description.first_line().substr(0, 30), "(no description set)")')
|
||||
__jj file list -r $argv[1] | while read -l file
|
||||
printf "%s\t%s\n" $file $description
|
||||
end
|
||||
end
|
||||
|
||||
function __jj_revision_conflicted_files
|
||||
__jj resolve --list -r $argv[1] | while read -l line
|
||||
set -l file (string split " " -m 1 -- $line)
|
||||
printf "%s\t%s\n" $file[1] $file[2]
|
||||
end
|
||||
end
|
||||
|
||||
function __jj_parse_revision_files
|
||||
set -l rev (__jj_parse_revision)
|
||||
if test $status -eq 1
|
||||
set rev "@"
|
||||
end
|
||||
__jj_revision_files $rev
|
||||
end
|
||||
|
||||
function __jj_parse_revision_conflicted_files
|
||||
set -l rev (__jj_parse_revision)
|
||||
if test $status -eq 1
|
||||
set rev "@"
|
||||
end
|
||||
__jj_revision_conflicted_files $rev
|
||||
end
|
||||
|
||||
function __jj_parse_revision_files_or_wc_modified_files
|
||||
set -l revs (__jj_parse_revision)
|
||||
if test $status -eq 1
|
||||
__jj_revision_modified_files "@"
|
||||
else
|
||||
for rev in $revs
|
||||
__jj_revision_files $rev
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function __jj_parse_revision_modified_files_or_wc_modified_files
|
||||
set -l revs (__jj_parse_revision)
|
||||
if test $status -eq 1
|
||||
__jj_revision_modified_files "@"
|
||||
else
|
||||
for rev in $revs
|
||||
__jj_revision_modified_files $rev
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
# Aliases.
|
||||
complete -f -c jj -n __fish_use_subcommand -a '(__jj_aliases_with_descriptions)'
|
||||
|
||||
# Files.
|
||||
complete -f -c jj -n '__jj_seen_subcommand_from file; and __jj_seen_subcommand_from show' -ka '(__jj_parse_revision_files)'
|
||||
complete -f -c jj -n '__jj_seen_subcommand_from file; and __jj_seen_subcommand_from chmod' -ka '(__jj_parse_revision_files)'
|
||||
complete -f -c jj -n '__jj_seen_subcommand_from commit' -ka '(__jj_revision_modified_files "@")'
|
||||
complete -c jj -n '__jj_seen_subcommand_from diff' -ka '(__jj_parse_revision_files_or_wc_modified_files)'
|
||||
complete -c jj -n '__jj_seen_subcommand_from interdiff' -ka '(__jj_parse_revision_files)'
|
||||
complete -f -c jj -n '__jj_seen_subcommand_from resolve' -ka '(__jj_parse_revision_conflicted_files)'
|
||||
complete -f -c jj -n '__jj_seen_subcommand_from restore' -ka '(__jj_parse_revision_files_or_wc_modified_files)'
|
||||
complete -f -c jj -n '__jj_seen_subcommand_from split' -ka '(__jj_parse_revision_modified_files_or_wc_modified_files)'
|
||||
complete -f -c jj -n '__jj_seen_subcommand_from squash' -ka '(__jj_parse_revision_modified_files_or_wc_modified_files)'
|
||||
complete -f -c jj -n '__jj_seen_subcommand_from untrack' -ka '(__jj_parse_revision_files_or_wc_modified_files)'
|
||||
|
||||
# Revisions.
|
||||
complete -f -c jj -n '__jj_seen_subcommand_from abandon' -ka '(__jj_mutable_changes)'
|
||||
complete -f -c jj -n '__jj_seen_subcommand_from backout' -s r -l revision -rka '(__jj_all_changes)'
|
||||
complete -f -c jj -n '__jj_seen_subcommand_from backout' -s d -l destination -rka '(__jj_all_changes)'
|
||||
complete -f -c jj -n '__jj_seen_subcommand_from file; and __jj_seen_subcommand_from show' -s r -l revision -rka '(__jj_all_changes)'
|
||||
complete -f -c jj -n '__jj_seen_subcommand_from chmod' -s r -l revision -rka '(__jj_mutable_changes)'
|
||||
complete -f -c jj -n '__jj_seen_subcommand_from describe' -ka '(__jj_mutable_changes)'
|
||||
complete -f -c jj -n '__jj_seen_subcommand_from diff' -s r -l revision -rka '(__jj_all_changes)'
|
||||
complete -f -c jj -n '__jj_seen_subcommand_from diff' -l from -rka '(__jj_all_changes)'
|
||||
complete -f -c jj -n '__jj_seen_subcommand_from diff' -l to -rka '(__jj_all_changes)'
|
||||
complete -f -c jj -n '__jj_seen_subcommand_from diffedit' -s r -l revision -rka '(__jj_mutable_changes)'
|
||||
complete -f -c jj -n '__jj_seen_subcommand_from diffedit' -l from -rka '(__jj_all_changes)'
|
||||
complete -f -c jj -n '__jj_seen_subcommand_from diffedit' -l to -rka '(__jj_mutable_changes)'
|
||||
complete -f -c jj -n '__jj_seen_subcommand_from duplicate' -ka '(__jj_all_changes)'
|
||||
complete -f -c jj -n '__jj_seen_subcommand_from edit' -ka '(__jj_mutable_changes)'
|
||||
complete -f -c jj -n '__jj_seen_subcommand_from file; and __jj_seen_subcommand_from list' -s r -l revision -rka '(__jj_all_changes)'
|
||||
complete -f -c jj -n '__jj_seen_subcommand_from interdiff' -l from -rka '(__jj_all_changes)'
|
||||
complete -f -c jj -n '__jj_seen_subcommand_from interdiff' -l to -rka '(__jj_all_changes)'
|
||||
complete -f -c jj -n '__jj_seen_subcommand_from log' -s r -rka '(__jj_all_changes)'
|
||||
complete -f -c jj -n '__jj_seen_subcommand_from new' -ka '(__jj_all_changes)'
|
||||
complete -f -c jj -n '__jj_seen_subcommand_from new' -s A -l after -l insert-after -rka '(__jj_all_changes)'
|
||||
complete -f -c jj -n '__jj_seen_subcommand_from new' -s B -l before -l insert-before -rka '(__jj_mutable_changes)'
|
||||
complete -f -c jj -n '__jj_seen_subcommand_from obslog' -s r -l revision -rka '(__jj_all_changes)'
|
||||
complete -f -c jj -n '__jj_seen_subcommand_from parallelize' -ka '(__jj_mutable_changes)'
|
||||
complete -f -c jj -n '__jj_seen_subcommand_from rebase' -s r -l revisions -rka '(__jj_mutable_changes)'
|
||||
complete -f -c jj -n '__jj_seen_subcommand_from rebase' -s s -l source -rka '(__jj_mutable_changes)'
|
||||
complete -f -c jj -n '__jj_seen_subcommand_from rebase' -s b -l bookmark -rka '(__jj_mutable_changes)'
|
||||
complete -f -c jj -n '__jj_seen_subcommand_from rebase' -s d -l destination -rka '(__jj_all_changes)'
|
||||
complete -f -c jj -n '__jj_seen_subcommand_from rebase' -s A -l after -l insert-after -rka '(__jj_all_changes)'
|
||||
complete -f -c jj -n '__jj_seen_subcommand_from rebase' -s B -l before -l insert-before -rka '(__jj_mutable_changes)'
|
||||
complete -f -c jj -n '__jj_seen_subcommand_from resolve' -s r -l revision -rka '(__jj_mutable_changes)'
|
||||
complete -f -c jj -n '__jj_seen_subcommand_from restore' -l from -rka '(__jj_all_changes)'
|
||||
complete -f -c jj -n '__jj_seen_subcommand_from restore' -l to -rka '(__jj_mutable_changes)'
|
||||
complete -f -c jj -n '__jj_seen_subcommand_from restore' -s c -l changes-in -rka '(__jj_all_changes)'
|
||||
complete -f -c jj -n '__jj_seen_subcommand_from show' -ka '(__jj_all_changes)'
|
||||
complete -f -c jj -n '__jj_seen_subcommand_from split' -s r -l revision -rka '(__jj_mutable_changes)'
|
||||
complete -f -c jj -n '__jj_seen_subcommand_from squash' -s r -l revision -rka '(__jj_mutable_changes)'
|
||||
complete -f -c jj -n '__jj_seen_subcommand_from squash' -l from -rka '(__jj_mutable_changes)'
|
||||
complete -f -c jj -n '__jj_seen_subcommand_from squash' -l to -l into -rka '(__jj_mutable_changes)'
|
||||
complete -f -c jj -n '__jj_seen_subcommand_from unsquash' -s r -l revision -rka '(__jj_mutable_changes)'
|
||||
|
||||
# Bookmarks
|
||||
complete -f -c jj -n '__jj_seen_subcommand_from bookmark; and __jj_seen_subcommand_from delete forget rename set d f r s' -ka '(__jj_local_bookmarks)'
|
||||
complete -f -c jj -n '__jj_seen_subcommand_from bookmark; and __jj_seen_subcommand_from track t' -ka '(__jj_bookmarks "remote && !tracked" "")'
|
||||
complete -f -c jj -n '__jj_seen_subcommand_from bookmark; and __jj_seen_subcommand_from untrack' -ka '(__jj_bookmarks "remote && tracked && !remote.starts_with(\"git\")" "")'
|
||||
complete -f -c jj -n '__jj_seen_subcommand_from bookmark; and __jj_seen_subcommand_from create move set c m s' -s r -l revision -kra '(__jj_all_changes)'
|
||||
complete -f -c jj -n '__jj_seen_subcommand_from bookmark; and __jj_seen_subcommand_from move' -l from -rka '(__jj_changes "all()")'
|
||||
complete -f -c jj -n '__jj_seen_subcommand_from bookmark; and __jj_seen_subcommand_from move' -l to -rka '(__jj_changes "all()")'
|
||||
|
||||
# Git.
|
||||
complete -f -c jj -n '__jj_seen_subcommand_from git; and __jj_seen_subcommand_from push' -s c -l change -kra '(__jj_changes "all()")'
|
||||
complete -f -c jj -n '__jj_seen_subcommand_from git; and __jj_seen_subcommand_from push' -s r -l revisions -kra '(__jj_changes "all()")'
|
||||
complete -f -c jj -n '__jj_seen_subcommand_from git; and __jj_seen_subcommand_from fetch push' -s b -l bookmark -rka '(__jj_local_bookmarks)'
|
||||
complete -f -c jj -n '__jj_seen_subcommand_from git; and __jj_seen_subcommand_from fetch push' -l remote -rka '(__jj_remotes)'
|
||||
complete -f -c jj -n '__jj_seen_subcommand_from git; and __jj_seen_subcommand_from remote; and __jj_seen_subcommand_from remove rename set-url' -ka '(__jj_remotes)'
|
||||
|
||||
# Operations.
|
||||
complete -f -c jj -l at-op -l at-operation -rka '(__jj_operations)'
|
||||
complete -f -c jj -n '__jj_seen_subcommand_from undo' -ka '(__jj_operations)'
|
||||
complete -f -c jj -n '__jj_seen_subcommand_from operation; and __jj_seen_subcommand_from abandon undo restore' -ka '(__jj_operations)'
|
|
@ -53,6 +53,15 @@ function vcs_log
|
|||
commandline -f repaint
|
||||
end
|
||||
|
||||
function vcs_ui
|
||||
if __jj_in_repo
|
||||
lazyjj
|
||||
else
|
||||
gitui
|
||||
end
|
||||
commandline -f repaint
|
||||
end
|
||||
|
||||
# Abbreviations
|
||||
|
||||
abbr -a d vcs_diff
|
||||
|
@ -62,9 +71,6 @@ abbr -a s vcs_status
|
|||
bind \c_ vcs_jump
|
||||
bind \ea vcs_log
|
||||
bind \ee vcs_broot
|
||||
bind \eg vcs_ui
|
||||
bind \eS vcs_diff
|
||||
bind \es vcs_status
|
||||
|
||||
# jj completions
|
||||
|
||||
COMPLETE=fish jj | source
|
||||
|
|
|
@ -186,109 +186,3 @@ for i in $(seq 255 -1 128); do
|
|||
echo -n " "
|
||||
done
|
||||
resetOutput
|
||||
|
||||
|
||||
## Color test
|
||||
|
||||
# Tom Hale, 2016. MIT Licence.
|
||||
# Print out 256 colours, with each number printed in its corresponding colour
|
||||
# See http://askubuntu.com/questions/821157/print-a-256-color-test-pattern-in-the-terminal/821163#821163
|
||||
|
||||
set -eu # Fail on errors or undeclared variables
|
||||
|
||||
printable_colours=256
|
||||
|
||||
# Return a colour that contrasts with the given colour
|
||||
# Bash only does integer division, so keep it integral
|
||||
function contrast_colour {
|
||||
local r g b luminance
|
||||
colour="$1"
|
||||
|
||||
if (( colour < 16 )); then # Initial 16 ANSI colours
|
||||
(( colour == 0 )) && printf "15" || printf "0"
|
||||
return
|
||||
fi
|
||||
|
||||
# Greyscale # rgb_R = rgb_G = rgb_B = (number - 232) * 10 + 8
|
||||
if (( colour > 231 )); then # Greyscale ramp
|
||||
(( colour < 244 )) && printf "15" || printf "0"
|
||||
return
|
||||
fi
|
||||
|
||||
# All other colours:
|
||||
# 6x6x6 colour cube = 16 + 36*R + 6*G + B # Where RGB are [0..5]
|
||||
# See http://stackoverflow.com/a/27165165/5353461
|
||||
|
||||
# r=$(( (colour-16) / 36 ))
|
||||
g=$(( ((colour-16) % 36) / 6 ))
|
||||
# b=$(( (colour-16) % 6 ))
|
||||
|
||||
# If luminance is bright, print number in black, white otherwise.
|
||||
# Green contributes 587/1000 to human perceived luminance - ITU R-REC-BT.601
|
||||
(( g > 2)) && printf "0" || printf "15"
|
||||
return
|
||||
|
||||
# Uncomment the below for more precise luminance calculations
|
||||
|
||||
# # Calculate percieved brightness
|
||||
# # See https://www.w3.org/TR/AERT#color-contrast
|
||||
# # and http://www.itu.int/rec/R-REC-BT.601
|
||||
# # Luminance is in range 0..5000 as each value is 0..5
|
||||
# luminance=$(( (r * 299) + (g * 587) + (b * 114) ))
|
||||
# (( $luminance > 2500 )) && printf "0" || printf "15"
|
||||
}
|
||||
|
||||
# Print a coloured block with the number of that colour
|
||||
function print_colour {
|
||||
local colour="$1" contrast
|
||||
contrast=$(contrast_colour "$1")
|
||||
printf "\e[48;5;%sm" "$colour" # Start block of colour
|
||||
printf "\e[38;5;%sm%3d" "$contrast" "$colour" # In contrast, print number
|
||||
printf "\e[0m " # Reset colour
|
||||
}
|
||||
|
||||
# Starting at $1, print a run of $2 colours
|
||||
function print_run {
|
||||
local i
|
||||
for (( i = "$1"; i < "$1" + "$2" && i < printable_colours; i++ )) do
|
||||
print_colour "$i"
|
||||
done
|
||||
printf " "
|
||||
}
|
||||
|
||||
# Print blocks of colours
|
||||
function print_blocks {
|
||||
local start="$1" i
|
||||
local end="$2" # inclusive
|
||||
local block_cols="$3"
|
||||
local block_rows="$4"
|
||||
local blocks_per_line="$5"
|
||||
local block_length=$((block_cols * block_rows))
|
||||
|
||||
# Print sets of blocks
|
||||
for (( i = start; i <= end; i += (blocks_per_line-1) * block_length )) do
|
||||
printf "\n" # Space before each set of blocks
|
||||
# For each block row
|
||||
for (( row = 0; row < block_rows; row++ )) do
|
||||
# Print block columns for all blocks on the line
|
||||
for (( block = 0; block < blocks_per_line; block++ )) do
|
||||
print_run $(( i + (block * block_length) )) "$block_cols"
|
||||
done
|
||||
(( i += block_cols )) # Prepare to print the next row
|
||||
printf "\n"
|
||||
done
|
||||
done
|
||||
}
|
||||
|
||||
echo
|
||||
echo "ANSI 4-bit colors:"
|
||||
echo
|
||||
|
||||
print_run 0 16 # The first 16 colours are spread over the whole spectrum
|
||||
|
||||
echo
|
||||
echo
|
||||
echo "ANSI 8-bit colors:"
|
||||
|
||||
print_blocks 16 231 6 6 3 # 6x6x6 colour cube between 16 and 231 inclusive
|
||||
print_blocks 232 255 12 2 1 # Not 50, but 24 Shades of Grey
|
||||
|
|
208
flake.lock
generated
208
flake.lock
generated
|
@ -3,11 +3,11 @@
|
|||
"flake-compat": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1747046372,
|
||||
"narHash": "sha256-CIVLLkVgvHYbgI2UpXvIIBJ12HWgX+fjA8Xf8PUmqCY=",
|
||||
"lastModified": 1696426674,
|
||||
"narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=",
|
||||
"owner": "edolstra",
|
||||
"repo": "flake-compat",
|
||||
"rev": "9100a0f413b0c601e0533d1d94ffd501ce2e7885",
|
||||
"rev": "0f9255e01c2351cc7d116c072cb317785dd33b33",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
@ -40,11 +40,11 @@
|
|||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1743550720,
|
||||
"narHash": "sha256-hIshGgKZCgWh6AYJpJmRgFdR3WUbkY04o82X05xqQiY=",
|
||||
"lastModified": 1730504689,
|
||||
"narHash": "sha256-hgmguH29K2fvs9szpq2r3pz2/8cJd2LPS+b4tfNFCwE=",
|
||||
"owner": "hercules-ci",
|
||||
"repo": "flake-parts",
|
||||
"rev": "c621e8422220273271f52058f618c94e405bb0f5",
|
||||
"rev": "506278e768c2a08bec68eb62932193e341f55c90",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
@ -62,11 +62,11 @@
|
|||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1743550720,
|
||||
"narHash": "sha256-hIshGgKZCgWh6AYJpJmRgFdR3WUbkY04o82X05xqQiY=",
|
||||
"lastModified": 1712014858,
|
||||
"narHash": "sha256-sB4SWl2lX95bExY2gMFG5HIzvva5AVMJd4Igm+GpZNw=",
|
||||
"owner": "hercules-ci",
|
||||
"repo": "flake-parts",
|
||||
"rev": "c621e8422220273271f52058f618c94e405bb0f5",
|
||||
"rev": "9126214d0a59633752a136528f5f3b9aa8565b7d",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
@ -74,6 +74,63 @@
|
|||
"type": "indirect"
|
||||
}
|
||||
},
|
||||
"flake-utils": {
|
||||
"inputs": {
|
||||
"systems": "systems"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1705309234,
|
||||
"narHash": "sha256-uNRRNRKmJyCRC/8y1RqBkqWBLM034y4qN7EprSdmgyA=",
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"rev": "1ef2e671c3b0c19053962c07dbda38332dcebf26",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"ghostty": {
|
||||
"inputs": {
|
||||
"nixpkgs-stable": [
|
||||
"nixpkgs"
|
||||
],
|
||||
"nixpkgs-unstable": [
|
||||
"nixpkgs"
|
||||
],
|
||||
"zig": "zig"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1731971697,
|
||||
"narHash": "sha256-6JNMcpy0z19yOLBRt3eE4Rk4A96kcEsRv5+ym1hkv1c=",
|
||||
"ref": "refs/heads/main",
|
||||
"rev": "29c3a52e964a97dddaed876ce472aeb167774acf",
|
||||
"revCount": 8021,
|
||||
"type": "git",
|
||||
"url": "ssh://git@github.com/ghostty-org/ghostty"
|
||||
},
|
||||
"original": {
|
||||
"type": "git",
|
||||
"url": "ssh://git@github.com/ghostty-org/ghostty"
|
||||
}
|
||||
},
|
||||
"ghostty-hm": {
|
||||
"locked": {
|
||||
"lastModified": 1702368251,
|
||||
"narHash": "sha256-hafrDmzGplzm+vdIo+LkOjRfA4qRcy5JmpGGksnht5c=",
|
||||
"owner": "clo4",
|
||||
"repo": "ghostty-hm-module",
|
||||
"rev": "887e13a6e7acf5ffaab0119d96e476d84db90904",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "clo4",
|
||||
"repo": "ghostty-hm-module",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"git-hooks": {
|
||||
"inputs": {
|
||||
"flake-compat": "flake-compat_2",
|
||||
|
@ -81,14 +138,18 @@
|
|||
"nixpkgs": [
|
||||
"neovim-nightly-overlay",
|
||||
"nixpkgs"
|
||||
],
|
||||
"nixpkgs-stable": [
|
||||
"neovim-nightly-overlay",
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1747372754,
|
||||
"narHash": "sha256-2Y53NGIX2vxfie1rOW0Qb86vjRZ7ngizoo+bnXU9D9k=",
|
||||
"lastModified": 1731363552,
|
||||
"narHash": "sha256-vFta1uHnD29VUY4HJOO/D6p6rxyObnf+InnSMT4jlMU=",
|
||||
"owner": "cachix",
|
||||
"repo": "git-hooks.nix",
|
||||
"rev": "80479b6ec16fefd9c1db3ea13aeb038c60530f46",
|
||||
"rev": "cd1af27aa85026ac759d5d3fccf650abe7e1bbf0",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
@ -128,11 +189,11 @@
|
|||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1748000383,
|
||||
"narHash": "sha256-EaAJhwfJGBncgIV/0NlJviid2DP93cTMc9h0q6P6xXk=",
|
||||
"lastModified": 1730903510,
|
||||
"narHash": "sha256-mnynlrPeiW0nUQ8KGZHb3WyxAxA3Ye/BH8gMjdoKP6E=",
|
||||
"owner": "hercules-ci",
|
||||
"repo": "hercules-ci-effects",
|
||||
"rev": "231726642197817d20310b9d39dd4afb9e899489",
|
||||
"rev": "b89ac4d66d618b915b1f0a408e2775fe3821d141",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
@ -148,11 +209,11 @@
|
|||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1748570847,
|
||||
"narHash": "sha256-XU1a6wFctd+s3ZvBIFB6s4GhPJ+Oc6pkeOrEsbA2fMo=",
|
||||
"lastModified": 1731968878,
|
||||
"narHash": "sha256-+hTCwETOE9N8voTAaF+IzdUZz28Ws3LDpH90FWADrEE=",
|
||||
"owner": "nix-community",
|
||||
"repo": "home-manager",
|
||||
"rev": "4e9efaa68b0be7e19127dad4f0506a9b89e28ef4",
|
||||
"rev": "a42fa14b53ceab66274a21da480c9f8e06204173",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
@ -168,15 +229,14 @@
|
|||
"git-hooks": "git-hooks",
|
||||
"hercules-ci-effects": "hercules-ci-effects",
|
||||
"neovim-src": "neovim-src",
|
||||
"nixpkgs": "nixpkgs",
|
||||
"treefmt-nix": "treefmt-nix"
|
||||
"nixpkgs": "nixpkgs"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1748588826,
|
||||
"narHash": "sha256-lfSvGRDpep7LVD4L/97Xjn3bglB247S4bgpfpMbqGP4=",
|
||||
"lastModified": 1732002290,
|
||||
"narHash": "sha256-v17KxlCf0O7hoD9AjiF94T2nuZuh7ZREyI6Ww/Tr4R0=",
|
||||
"owner": "nix-community",
|
||||
"repo": "neovim-nightly-overlay",
|
||||
"rev": "2e9ad466d7b54245229087c980da0615f54e4b2f",
|
||||
"rev": "2a9b9e821c7f91eb6ae540925a453f9ebacd0513",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
@ -188,11 +248,11 @@
|
|||
"neovim-src": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1748543356,
|
||||
"narHash": "sha256-Xo3LBLzEMIdmT0s8UWfNUJvTBHxB5PSYKJyFPBcGx8w=",
|
||||
"lastModified": 1731949793,
|
||||
"narHash": "sha256-ZXZInL8J38JaVpglSPa78ptn1zlqbaRHDtpa73CqpfI=",
|
||||
"owner": "neovim",
|
||||
"repo": "neovim",
|
||||
"rev": "b28bbee539625f9bcbf128e8da400d1d55b499ff",
|
||||
"rev": "989a37a594649528f28432388c0e7e28e8be2753",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
@ -201,33 +261,13 @@
|
|||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nix-index-database": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1748145500,
|
||||
"narHash": "sha256-t9fx0l61WOxtWxXCqlXPWSuG/0XMF9DtE2T7KXgMqJw=",
|
||||
"owner": "nix-community",
|
||||
"repo": "nix-index-database",
|
||||
"rev": "a98adbf54d663395df0b9929f6481d4d80fc8927",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-community",
|
||||
"repo": "nix-index-database",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1748475218,
|
||||
"narHash": "sha256-zDYqMBDbQR4SU9vHFrvHRbI0qxv0RGAoog5idGLiOWQ=",
|
||||
"lastModified": 1731890469,
|
||||
"narHash": "sha256-D1FNZ70NmQEwNxpSSdTXCSklBH1z2isPR84J6DQrJGs=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "e80506de785dc48dcfbb636c443c5e2b0b5b2d7d",
|
||||
"rev": "5083ec887760adfe12af64830a66807423a859a7",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
@ -239,27 +279,27 @@
|
|||
},
|
||||
"nixpkgs-stable": {
|
||||
"locked": {
|
||||
"lastModified": 1748437600,
|
||||
"narHash": "sha256-hYKMs3ilp09anGO7xzfGs3JqEgUqFMnZ8GMAqI6/k04=",
|
||||
"lastModified": 1731797254,
|
||||
"narHash": "sha256-df3dJApLPhd11AlueuoN0Q4fHo/hagP75LlM5K1sz9g=",
|
||||
"owner": "nixos",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "7282cb574e0607e65224d33be8241eae7cfe0979",
|
||||
"rev": "e8c38b73aeb218e27163376a2d617e61a2ad9b59",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nixos",
|
||||
"ref": "nixos-25.05",
|
||||
"ref": "nixos-24.05",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs-unstable": {
|
||||
"locked": {
|
||||
"lastModified": 1748506378,
|
||||
"narHash": "sha256-oS0Gxh63Df8b8r04lqEYDDLKhHIrVr9/JLOn2bn8JaI=",
|
||||
"lastModified": 1731890469,
|
||||
"narHash": "sha256-D1FNZ70NmQEwNxpSSdTXCSklBH1z2isPR84J6DQrJGs=",
|
||||
"owner": "nixos",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "3866ad91cfc172f08a6839def503d8fc2923c603",
|
||||
"rev": "5083ec887760adfe12af64830a66807423a859a7",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
@ -271,11 +311,11 @@
|
|||
},
|
||||
"nixpkgs_2": {
|
||||
"locked": {
|
||||
"lastModified": 1748370509,
|
||||
"narHash": "sha256-QlL8slIgc16W5UaI3w7xHQEP+Qmv/6vSNTpoZrrSlbk=",
|
||||
"lastModified": 1731676054,
|
||||
"narHash": "sha256-OZiZ3m8SCMfh3B6bfGC/Bm4x3qc1m2SVEAlkV6iY7Yg=",
|
||||
"owner": "nixos",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "4faa5f5321320e49a78ae7848582f684d64783e9",
|
||||
"rev": "5e4fbfb6b3de1aa2872b76d49fafc942626e2add",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
@ -287,32 +327,52 @@
|
|||
},
|
||||
"root": {
|
||||
"inputs": {
|
||||
"ghostty": "ghostty",
|
||||
"ghostty-hm": "ghostty-hm",
|
||||
"home-manager": "home-manager",
|
||||
"neovim-nightly-overlay": "neovim-nightly-overlay",
|
||||
"nix-index-database": "nix-index-database",
|
||||
"nixpkgs": "nixpkgs_2",
|
||||
"nixpkgs-stable": "nixpkgs-stable",
|
||||
"nixpkgs-unstable": "nixpkgs-unstable"
|
||||
}
|
||||
},
|
||||
"treefmt-nix": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"neovim-nightly-overlay",
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"systems": {
|
||||
"locked": {
|
||||
"lastModified": 1748243702,
|
||||
"narHash": "sha256-9YzfeN8CB6SzNPyPm2XjRRqSixDopTapaRsnTpXUEY8=",
|
||||
"owner": "numtide",
|
||||
"repo": "treefmt-nix",
|
||||
"rev": "1f3f7b784643d488ba4bf315638b2b0a4c5fb007",
|
||||
"lastModified": 1681028828,
|
||||
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
|
||||
"owner": "nix-systems",
|
||||
"repo": "default",
|
||||
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "numtide",
|
||||
"repo": "treefmt-nix",
|
||||
"owner": "nix-systems",
|
||||
"repo": "default",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"zig": {
|
||||
"inputs": {
|
||||
"flake-compat": [
|
||||
"ghostty"
|
||||
],
|
||||
"flake-utils": "flake-utils",
|
||||
"nixpkgs": [
|
||||
"ghostty",
|
||||
"nixpkgs-stable"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1717848532,
|
||||
"narHash": "sha256-d+xIUvSTreHl8pAmU1fnmkfDTGQYCn2Rb/zOwByxS2M=",
|
||||
"owner": "mitchellh",
|
||||
"repo": "zig-overlay",
|
||||
"rev": "02fc5cc555fc14fda40c42d7c3250efa43812b43",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "mitchellh",
|
||||
"repo": "zig-overlay",
|
||||
"type": "github"
|
||||
}
|
||||
}
|
||||
|
|
30
flake.nix
30
flake.nix
|
@ -3,7 +3,7 @@
|
|||
|
||||
nixConfig = {
|
||||
substituters = [
|
||||
"https://cache-nixos-org.aarn.patagia.net/"
|
||||
"https://cache.nixos.org/"
|
||||
];
|
||||
extra-substituters = [
|
||||
"https://nix-community.cachix.org"
|
||||
|
@ -15,23 +15,28 @@
|
|||
|
||||
inputs = {
|
||||
neovim-nightly-overlay.url = "github:nix-community/neovim-nightly-overlay";
|
||||
nixpkgs-stable.url = "github:nixos/nixpkgs/nixos-25.05";
|
||||
nixpkgs-unstable.url = "github:nixos/nixpkgs/nixpkgs-unstable";
|
||||
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
|
||||
|
||||
nix-index-database.url = "github:nix-community/nix-index-database";
|
||||
nix-index-database.inputs.nixpkgs.follows = "nixpkgs";
|
||||
nixpkgs-stable.url = "github:nixos/nixpkgs/nixos-24.05";
|
||||
nixpkgs-unstable.url = "github:nixos/nixpkgs/nixpkgs-unstable";
|
||||
|
||||
home-manager.url = "github:nix-community/home-manager";
|
||||
home-manager.inputs.nixpkgs.follows = "nixpkgs";
|
||||
|
||||
ghostty = {
|
||||
url = "git+ssh://git@github.com/ghostty-org/ghostty";
|
||||
inputs = {
|
||||
nixpkgs-stable.follows = "nixpkgs";
|
||||
nixpkgs-unstable.follows = "nixpkgs";
|
||||
};
|
||||
};
|
||||
ghostty-hm.url = "github:clo4/ghostty-hm-module";
|
||||
};
|
||||
|
||||
outputs =
|
||||
inputs@{
|
||||
self,
|
||||
nix-index-database,
|
||||
nixpkgs,
|
||||
nixpkgs-unstable,
|
||||
ghostty-hm,
|
||||
home-manager,
|
||||
...
|
||||
}:
|
||||
|
@ -52,13 +57,13 @@
|
|||
mkHome =
|
||||
modules:
|
||||
home-manager.lib.homeManagerConfiguration {
|
||||
pkgs = nixpkgs-unstable.legacyPackages.${system};
|
||||
inherit pkgs;
|
||||
extraSpecialArgs = {
|
||||
inherit inputs outputs;
|
||||
};
|
||||
modules = [
|
||||
ghostty-hm.homeModules.default
|
||||
./home/common
|
||||
nix-index-database.hmModules.nix-index
|
||||
] ++ modules;
|
||||
};
|
||||
in
|
||||
|
@ -68,11 +73,7 @@
|
|||
devShell.${system} = pkgs.mkShell {
|
||||
packages = with pkgs; [
|
||||
just
|
||||
lua-language-server
|
||||
nh
|
||||
nil
|
||||
nixd
|
||||
nixfmt-rfc-style
|
||||
];
|
||||
};
|
||||
|
||||
|
@ -86,6 +87,7 @@
|
|||
"dln@dinky" = mkHome [ ./home/dln/dinky.nix ];
|
||||
"dln@nemo" = mkHome [ ./home/dln/nemo.nix ];
|
||||
"dln@pearl" = mkHome [ ./home/dln/pearl.nix ];
|
||||
"lsjostro@nemo" = mkHome [ ./home/lsjostro/nemo.nix ];
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
search_mode_shell_up_key_binding = "prefix";
|
||||
show_help = false;
|
||||
style = "compact";
|
||||
sync_address = "https://atuin.patagia.net";
|
||||
sync_address = "https://atuin.patagia.dev";
|
||||
sync.records = true;
|
||||
|
||||
daemon = {
|
||||
|
|
|
@ -16,10 +16,7 @@
|
|||
./utils.nix
|
||||
./vcs.nix
|
||||
./web.nix
|
||||
./wezterm.nix
|
||||
];
|
||||
|
||||
options.patagia.desktop.enable = lib.mkEnableOption "Desktop environment";
|
||||
options.patagia.laptop.enable = lib.mkEnableOption "Laptop";
|
||||
options.patagia.oled.enable = lib.mkEnableOption "Darker darks on oled screens";
|
||||
}
|
||||
|
|
|
@ -2,17 +2,33 @@
|
|||
{
|
||||
home.packages = with pkgs; [
|
||||
age-plugin-fido2-hmac
|
||||
bacon
|
||||
cargo
|
||||
clang
|
||||
codeium
|
||||
comma
|
||||
dogdns
|
||||
file
|
||||
gnumake
|
||||
go
|
||||
just
|
||||
ldns
|
||||
minio-client
|
||||
nil
|
||||
nix-output-monitor
|
||||
openssl
|
||||
nixd
|
||||
nixfmt-rfc-style
|
||||
nodejs_22
|
||||
passage
|
||||
rage
|
||||
prettierd
|
||||
rust-analyzer
|
||||
rustc
|
||||
stylua
|
||||
tree-sitter
|
||||
];
|
||||
|
||||
home.sessionVariables = {
|
||||
GOPROXY = "https://athena.patagia.net";
|
||||
GOPROXY = "https://athena.patagia.dev";
|
||||
};
|
||||
}
|
||||
|
|
|
@ -3,7 +3,12 @@
|
|||
programs.fish = {
|
||||
enable = true;
|
||||
|
||||
|
||||
plugins = [
|
||||
{
|
||||
name = "grc";
|
||||
src = pkgs.fishPlugins.grc.src;
|
||||
}
|
||||
{
|
||||
name = "transient";
|
||||
src = pkgs.fishPlugins.transient-fish.src;
|
||||
|
@ -38,11 +43,40 @@
|
|||
body = ''confirm "⚠ Really shutdown $(hostname)?" && command shutdown $argv'';
|
||||
};
|
||||
|
||||
e = {
|
||||
description = "Open a file in already running nvim";
|
||||
tmux-refresh-env = {
|
||||
description = "Refresh environment variables from tmux session";
|
||||
body = ''
|
||||
for var in (tmux show-environment | string match -rv '^-')
|
||||
set -l parts (string split -m 1 '=' $var)
|
||||
if test (count $parts) -eq 2
|
||||
set -Ux $parts[1] $parts[2]
|
||||
end
|
||||
end
|
||||
'';
|
||||
};
|
||||
|
||||
kubectl = {
|
||||
description = "Wraps kubectl in grc";
|
||||
wraps = "kubectl";
|
||||
body = "grc.wrap kubectl $argv";
|
||||
};
|
||||
|
||||
edit = {
|
||||
description = "Open a file in already running nvim and switch tab";
|
||||
argumentNames = [ "file" ];
|
||||
body = ''
|
||||
nvim-remote --remote (readlink -f "$file")
|
||||
set _file (readlink -f "$file")
|
||||
if test -z "$file"
|
||||
set _root (vcs_root)
|
||||
set _file (fd --type f . "$_root" | sed -e "s#^$_root/##" | fzf --no-sort --layout=reverse)
|
||||
set _file "$_root/$_file"
|
||||
end
|
||||
set _nvim_socket "$XDG_RUNTIME_DIR/nvim-persistent.sock"
|
||||
if test -S "$_nvim_socket" && tmux select-window -t nvim 2>/dev/null
|
||||
nvim --server "$_nvim_socket" --remote "$_file"
|
||||
return 0
|
||||
end
|
||||
tmux new-window -S -n nvim nvim --listen "$_nvim_socket" "$_file"
|
||||
'';
|
||||
};
|
||||
|
||||
|
@ -56,32 +90,17 @@
|
|||
'';
|
||||
|
||||
fish_jj_prompt.body = ''
|
||||
if not command -sq jj || not jj root --quiet &>/dev/null
|
||||
return 1
|
||||
end
|
||||
if not command -sq jj || not jj root --quiet &>/dev/null
|
||||
return 1
|
||||
end
|
||||
|
||||
# Generate prompt
|
||||
jj log --ignore-working-copy --no-graph --color never -r @ -T '
|
||||
surround(
|
||||
" \e[2;3m",
|
||||
"\e[0m",
|
||||
separate(
|
||||
" ",
|
||||
surround(
|
||||
"\e[0;2;3m",
|
||||
"\e[0m",
|
||||
coalesce(
|
||||
surround(
|
||||
"\e[1;2;3m❝",
|
||||
"❞\e[0m",
|
||||
if(
|
||||
description.first_line().substr(0, 80).starts_with(description.first_line()),
|
||||
description.first_line().substr(0, 80),
|
||||
description.first_line().substr(0, 79) ++ "…"
|
||||
)
|
||||
),
|
||||
"…"
|
||||
),
|
||||
),
|
||||
surround("\e[0;1;95m ", "\e[0;2;3m", change_id.shortest()),
|
||||
surround("\e[0;35m ", "\e[0m", bookmarks.join("╱")),
|
||||
surround("\e[0;34m ", "\e[0;2;3m", commit_id.shortest()),
|
||||
|
@ -94,14 +113,50 @@
|
|||
'
|
||||
'';
|
||||
|
||||
fish_jj_desc.body = ''
|
||||
if not command -sq jj || not jj root --quiet &>/dev/null
|
||||
return 1
|
||||
end
|
||||
|
||||
jj log --ignore-working-copy --no-graph --color never -r @ -T '
|
||||
surround(
|
||||
" \e[0;2;3m",
|
||||
"\e[0m",
|
||||
coalesce(
|
||||
surround(
|
||||
"\e[1;2;3m❝",
|
||||
"❞\e[0m",
|
||||
if(
|
||||
description.first_line().substr(0, 80).starts_with(description.first_line()),
|
||||
description.first_line().substr(0, 80),
|
||||
description.first_line().substr(0, 79) ++ "…"
|
||||
)
|
||||
),
|
||||
"…"
|
||||
),
|
||||
)
|
||||
'
|
||||
'';
|
||||
|
||||
fish_prompt.body = ''
|
||||
echo -e "\033[s\033[$LINES;1H\033[1;2;38;5;238m$(string pad -c '┄' -w $COLUMNS (fish_jj_prompt || fish_vcs_prompt))\033[0m\033[u"
|
||||
string join "" -- (set_color --dim) (prompt_hostname) ':' (prompt_pwd --full-length-dirs=4) (set_color --bold normal) ' ❯ ' (set_color normal)
|
||||
echo -e "\033[1;2;38;5;236m"
|
||||
string pad -c '┄' -w $COLUMNS (fish_jj_desc)
|
||||
echo -ne "\033[0;3m"
|
||||
string join "" -- (set_color --italics) (prompt_hostname) ':' (prompt_pwd --full-length-dirs=4) (set_color yellow) ' ❯ ' (set_color normal)
|
||||
'';
|
||||
|
||||
fish_right_prompt.body = ''
|
||||
if test $CMD_DURATION -gt 3000
|
||||
# Show duration of the last command in seconds
|
||||
set duration (echo "$CMD_DURATION 1000" | awk '{printf "%.1fs", $1 / $2}')
|
||||
echo -n "⏳$duration "
|
||||
end
|
||||
fish_jj_prompt || fish_vcs_prompt
|
||||
'';
|
||||
|
||||
transient_prompt_func.body = ''
|
||||
echo
|
||||
string join "" -- (set_color --bold) '❯ ' (set_color normal)
|
||||
string join "" -- (set_color yellow) '❯ ' (set_color normal)
|
||||
'';
|
||||
|
||||
rg.body = ''
|
||||
|
@ -116,14 +171,19 @@
|
|||
interactiveShellInit = lib.concatStringsSep "\n" [
|
||||
(builtins.readFile ../../files/config/fish/config.fish)
|
||||
(builtins.readFile ../../files/config/fish/semantic-prompt.fish)
|
||||
(builtins.readFile ../../files/config/fish/go-task.fish)
|
||||
(builtins.readFile ../../files/config/fish/jj.fish)
|
||||
(builtins.readFile ../../files/config/fish/vcs.fish)
|
||||
];
|
||||
|
||||
shellAbbrs = {
|
||||
e = "edit";
|
||||
l = "bat";
|
||||
ls = "eza";
|
||||
tree = "eza --tree";
|
||||
top = "btm --basic --enable_cache_memory --battery";
|
||||
ts = "TZ=Z date '+%Y%m%dT%H%M%SZ'";
|
||||
w = "viddy $history[1]";
|
||||
w = "viddy -n1 $history[1]";
|
||||
xc = "fish_clipboard_copy";
|
||||
};
|
||||
};
|
||||
|
|
|
@ -1,128 +1,159 @@
|
|||
{
|
||||
config,
|
||||
inputs,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
let
|
||||
launch-ghostty = pkgs.writeShellApplication {
|
||||
name = "launch-ghostty";
|
||||
text = ''
|
||||
if [ "$(gsettings get org.gnome.desktop.interface color-scheme)" = "'prefer-dark'" ]; then
|
||||
theme="theme_dark"
|
||||
else
|
||||
theme="theme_light"
|
||||
fi
|
||||
exec ghostty --config-file="$HOME/.config/ghostty/$theme" "$@"
|
||||
'';
|
||||
};
|
||||
in
|
||||
{
|
||||
config = lib.mkIf config.patagia.desktop.enable {
|
||||
|
||||
home.packages = with pkgs; [
|
||||
inputs.ghostty.packages.${pkgs.system}.default
|
||||
launch-ghostty
|
||||
];
|
||||
|
||||
programs.ghostty = {
|
||||
enable = true;
|
||||
enableFishIntegration = true;
|
||||
settings = {
|
||||
font-size = 11;
|
||||
font-family = "Berkeley Mono";
|
||||
font-family-italic = "Monaspace Radon Var";
|
||||
font-family-bold-italic = "Monaspace Krypton Var";
|
||||
font-style = "SemiCondensed";
|
||||
font-style-bold = "ExtraBold SemiCondensed";
|
||||
font-style-italic = "ExtraLight Italic";
|
||||
font-style-bold-italic = "ExtraLight";
|
||||
font-size = 14;
|
||||
font-family = "Berkeley Mono Variable";
|
||||
font-family-bold-italic = "Monaspace Xenon";
|
||||
font-style-bold-italic = "ExtraLight Italic";
|
||||
font-synthetic-style = false;
|
||||
font-variation-italic = [ "wght=100" ];
|
||||
|
||||
adjust-cell-height = 2;
|
||||
adjust-cell-height = 1;
|
||||
adjust-cursor-thickness = 5;
|
||||
adjust-font-baseline = 1;
|
||||
adjust-cursor-thickness = 4;
|
||||
adjust-underline-position = 3;
|
||||
adjust-underline-position = 2;
|
||||
adjust-underline-thickness = -1;
|
||||
|
||||
mouse-hide-while-typing = true;
|
||||
unfocused-split-opacity = 0.9;
|
||||
unfocused-split-fill = "#056157";
|
||||
cursor-style = "block";
|
||||
unfocused-split-opacity = 1.0;
|
||||
|
||||
shell-integration = "fish";
|
||||
|
||||
gtk-tabs-location = "hidden";
|
||||
window-decoration = false;
|
||||
gtk-tabs-location = "bottom";
|
||||
gtk-titlebar = false;
|
||||
gtk-titlebar-hide-when-maximized = true;
|
||||
window-height = 60;
|
||||
window-width = 160;
|
||||
window-padding-x = 12;
|
||||
window-padding-y = 0;
|
||||
window-padding-balance = true;
|
||||
window-padding-color = "extend";
|
||||
window-theme = "system";
|
||||
theme = "light:PatagiaLight,dark:PatagiaDark";
|
||||
|
||||
keybind = [
|
||||
"alt+shift+c=copy_to_clipboard"
|
||||
"alt+shift+v=paste_from_clipboard"
|
||||
"ctrl+i=text:\\x09"
|
||||
"ctrl+m=text:\\x0D"
|
||||
"ctrl+tab=goto_split:previous"
|
||||
"alt+`=goto_split:previous"
|
||||
"ctrl+[=text:\\x1B"
|
||||
"super+enter=toggle_fullscreen"
|
||||
"ctrl+enter=unbind"
|
||||
"alt+one=unbind"
|
||||
"alt+two=unbind"
|
||||
"alt+three=unbind"
|
||||
"alt+four=unbind"
|
||||
"alt+five=unbind"
|
||||
"alt+six=unbind"
|
||||
"alt+seven=unbind"
|
||||
"alt+eight=unbind"
|
||||
"alt+nine=unbind"
|
||||
];
|
||||
};
|
||||
themes = {
|
||||
PatagiaDark = {
|
||||
background = "#14151a";
|
||||
foreground = "#b7bec7";
|
||||
cursor-color = "#e7e7b7";
|
||||
selection-background = "#84979f";
|
||||
selection-foreground = "#000000";
|
||||
};
|
||||
PatagiaLight = {
|
||||
background = "#fefeff";
|
||||
foreground = "#222222";
|
||||
cursor-color = "#aa0000";
|
||||
selection-background = "#ffe6a4";
|
||||
selection-foreground = "#483600";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
xdg.configFile."ghostty/theme_dark".text = ''
|
||||
background = #0d1117
|
||||
foreground = #b2b2b2
|
||||
cursor-color = #00d992
|
||||
selection-background = #d7d7d7
|
||||
selection-foreground = #000000
|
||||
palette = 0=#000000
|
||||
palette = 1=#ff0035
|
||||
palette = 2=#85ff00
|
||||
palette = 3=#ffc900
|
||||
palette = 4=#00a7ff
|
||||
palette = 5=#cb01ff
|
||||
palette = 6=#00e0ff
|
||||
palette = 7=#f0f0f0
|
||||
palette = 8=#444444
|
||||
palette = 9=#ff8c88
|
||||
palette = 10=#baff94
|
||||
palette = 11=#ffe090
|
||||
palette = 12=#88ccff
|
||||
palette = 13=#e38dff
|
||||
palette = 14=#97eeff
|
||||
palette = 15=#ffffff
|
||||
'';
|
||||
|
||||
xdg.configFile."ghostty/theme_light".text = ''
|
||||
background = #fefeff
|
||||
foreground = #222222
|
||||
cursor-color = #aa0000
|
||||
selection-background = #ffe6a4
|
||||
selection-foreground = #483600
|
||||
palette = 0=#000000
|
||||
palette = 1=#9e001d
|
||||
palette = 2=#306300
|
||||
palette = 3=#deae00
|
||||
palette = 4=#00669e
|
||||
palette = 5=#7d009e
|
||||
palette = 6=#008a9e
|
||||
palette = 7=#f7f7f7
|
||||
palette = 8=#b0b0b0
|
||||
palette = 9=#ff0035
|
||||
palette = 10=#509e00
|
||||
palette = 11=#ffc900
|
||||
palette = 12=#00a7ff
|
||||
palette = 13=#cb01ff
|
||||
palette = 14=#00e0ff
|
||||
palette = 15=#ffffff
|
||||
'';
|
||||
|
||||
xdg.desktopEntries = {
|
||||
ghostty-secondary = {
|
||||
ghostty-local = {
|
||||
categories = [
|
||||
"System"
|
||||
"TerminalEmulator"
|
||||
];
|
||||
exec = ''
|
||||
ghostty --class=com.mitchellh.ghostty-secondary --background-opacity=0.8 --font-style="UltraCondensed" --font-style-bold="Bold UltraCondensed" --font-style-italic="UltraCondensed Oblique" -e bash
|
||||
'';
|
||||
genericName = "Secondary Ghostty";
|
||||
exec = ''launch-ghostty --class=com.mitchellh.ghostty-local -e "tmux new-session -A -s0 -nt1"'';
|
||||
genericName = "Ghostty (local)";
|
||||
icon = "com.mitchellh.ghostty";
|
||||
name = "Secondary Ghostty";
|
||||
name = "Ghostty (local)";
|
||||
settings = {
|
||||
StartupWMClass = "com.mitchellh.ghostty-secondary";
|
||||
TryExec = "ghostty";
|
||||
StartupWMClass = "com.mitchellh.ghostty-local";
|
||||
TryExec = "launch-ghostty";
|
||||
};
|
||||
terminal = false;
|
||||
type = "Application";
|
||||
};
|
||||
|
||||
ghostty-devel = {
|
||||
ghostty-nemo = {
|
||||
categories = [
|
||||
"System"
|
||||
"TerminalEmulator"
|
||||
];
|
||||
exec = ''
|
||||
ghostty --class=com.mitchellh.ghostty-devel --command="ssh -t devel" --initial-command="ssh -t devel"
|
||||
'';
|
||||
genericName = "Ghostty (devel)";
|
||||
exec = ''launch-ghostty --class=com.mitchellh.ghostty-nemo -e "ssh -t nemo tmux new-session -A -s0 -nt1"'';
|
||||
genericName = "Ghostty (nemo)";
|
||||
icon = "com.mitchellh.ghostty";
|
||||
name = "Ghostty (devel)";
|
||||
name = "Ghostty (nemo)";
|
||||
settings = {
|
||||
StartupWMClass = "com.mitchellh.ghostty-devel";
|
||||
TryExec = "ghostty";
|
||||
};
|
||||
terminal = false;
|
||||
type = "Application";
|
||||
};
|
||||
|
||||
ghostty-devel-secondary = {
|
||||
categories = [
|
||||
"System"
|
||||
"TerminalEmulator"
|
||||
];
|
||||
exec = ''
|
||||
ghostty --class=com.mitchellh.ghostty-devel-secondary --background-opacity=0.8 --font-style="ExtraCondensed" --font-style-bold="Bold ExtraCondensed" --font-style-italic="ExtraCondensed Oblique" --command="ssh -t devel" --initial-command="ssh -t devel"
|
||||
'';
|
||||
genericName = "Secondary Ghostty (devel)";
|
||||
icon = "com.mitchellh.ghostty";
|
||||
name = "Secondary Ghostty (devel)";
|
||||
settings = {
|
||||
StartupWMClass = "com.mitchellh.ghostty-devel-secondary";
|
||||
TryExec = "ghostty";
|
||||
StartupWMClass = "com.mitchellh.ghostty-nemo";
|
||||
TryExec = "launch-ghostty";
|
||||
};
|
||||
terminal = false;
|
||||
type = "Application";
|
||||
|
|
|
@ -8,17 +8,32 @@ with lib.hm.gvariant;
|
|||
{
|
||||
config = lib.mkIf config.patagia.desktop.enable {
|
||||
home.packages = with pkgs; [
|
||||
gnome-contacts
|
||||
gnome-shell-extensions
|
||||
gnome-tweaks
|
||||
gnome-pomodoro
|
||||
gnomeExtensions.desktop-clock
|
||||
gnomeExtensions.emoji-copy
|
||||
gnomeExtensions.just-perfection
|
||||
gnomeExtensions.night-light-slider
|
||||
gnomeExtensions.vitals
|
||||
];
|
||||
|
||||
dconf.settings = {
|
||||
"org/gnome/desktop/background" = {
|
||||
color-shading-type = "solid";
|
||||
picture-options = "zoom";
|
||||
picture-uri = "file:///run/current-system/sw/share/backgrounds/gnome/vnc-l.png";
|
||||
picture-uri-dark = "file:///run/current-system/sw/share/backgrounds/gnome/vnc-d.png";
|
||||
primary-color = "#77767B";
|
||||
secondary-color = "#000000";
|
||||
};
|
||||
|
||||
"org/gnome/desktop/screensaver" = {
|
||||
color-shading-type = "solid";
|
||||
picture-options = "zoom";
|
||||
picture-uri = "file:///run/current-system/sw/share/backgrounds/gnome/vnc-l.png";
|
||||
primary-color = "#77767B";
|
||||
secondary-color = "#000000";
|
||||
};
|
||||
|
||||
"org/gnome/desktop/wm/keybindings" = {
|
||||
close = [ "<Super>q" ];
|
||||
toggle-on-all-workspaces = [ "<Super>s" ];
|
||||
|
@ -27,7 +42,6 @@ with lib.hm.gvariant;
|
|||
minimize = [ "<Super>comma" ];
|
||||
move-to-center = [ "<Super>c" ];
|
||||
switch-applications = [ "<Super>Tab" ];
|
||||
switch-group = [ "<Super>Above_Tab" ];
|
||||
switch-windows = [ "<Alt>Tab" ];
|
||||
move-to-workspace-1 = [ "<Shift>F1" ];
|
||||
move-to-workspace-2 = [ "<Shift>F2" ];
|
||||
|
@ -69,9 +83,11 @@ with lib.hm.gvariant;
|
|||
enable-animations = false;
|
||||
enable-hot-corners = false;
|
||||
show-battery-percentage = true;
|
||||
font-antialiasing = "grayscale";
|
||||
font-hinting = "slight";
|
||||
font-name = "Inter Variable 11";
|
||||
document-font-name = "Inter Variable 11";
|
||||
monospace-font-name = "Berkeley Mono 11";
|
||||
monospace-font-name = "BerkeleyMono Nerd Font 11";
|
||||
toolkit-accessibility = false;
|
||||
};
|
||||
|
||||
|
@ -137,7 +153,7 @@ with lib.hm.gvariant;
|
|||
};
|
||||
|
||||
"org/gnome/mutter" = {
|
||||
center-new-windows = false;
|
||||
center-new-windows = true;
|
||||
edge-tiling = true;
|
||||
};
|
||||
|
||||
|
@ -152,6 +168,7 @@ with lib.hm.gvariant;
|
|||
enabled-extensions = [
|
||||
"emoji-copy@felipeftn"
|
||||
"just-perfection-desktop@just-perfection"
|
||||
"Vitals@CoreCoding.com"
|
||||
];
|
||||
};
|
||||
|
||||
|
@ -170,6 +187,10 @@ with lib.hm.gvariant;
|
|||
top-panel-position = 0;
|
||||
};
|
||||
|
||||
"org/gnome/shell/extensions/vitals" = {
|
||||
update-time = 15;
|
||||
};
|
||||
|
||||
"org/gnome/tweaks" = {
|
||||
show-extensions-notice = false;
|
||||
};
|
||||
|
|
|
@ -1,81 +0,0 @@
|
|||
require 'blink-cmp'.setup({
|
||||
keymap = {
|
||||
preset = 'enter',
|
||||
['<Tab>'] = { 'select_next', 'fallback' },
|
||||
['<S-Tab>'] = { 'select_prev', 'fallback' },
|
||||
['<PageDown>'] = { 'scroll_documentation_down', 'fallback' },
|
||||
['<PageUp>'] = { 'scroll_documentation_up', 'fallback' },
|
||||
},
|
||||
completion = {
|
||||
accept = {
|
||||
auto_brackets = { enabled = true, },
|
||||
},
|
||||
|
||||
documentation = {
|
||||
auto_show = true,
|
||||
auto_show_delay_ms = 800,
|
||||
window = { border = 'rounded', },
|
||||
},
|
||||
|
||||
ghost_text = { enabled = false },
|
||||
|
||||
list = {
|
||||
selection = {
|
||||
preselect = false,
|
||||
auto_insert = false
|
||||
},
|
||||
},
|
||||
|
||||
menu = {
|
||||
auto_show = true,
|
||||
border = 'rounded',
|
||||
direction_priority = { 'n', 's' },
|
||||
draw = {
|
||||
components = {
|
||||
kind_icon = {
|
||||
ellipsis = false,
|
||||
text = function(ctx)
|
||||
local kind_icon, _, _ = require('mini.icons').get('lsp', ctx.kind)
|
||||
return kind_icon
|
||||
end,
|
||||
-- Optionally, you may also use the highlights from mini.icons
|
||||
highlight = function(ctx)
|
||||
local _, hl, _ = require('mini.icons').get('lsp', ctx.kind)
|
||||
return hl
|
||||
end,
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
fuzzy = {
|
||||
prebuilt_binaries = {
|
||||
download = false
|
||||
},
|
||||
},
|
||||
|
||||
signature = {
|
||||
enabled = true,
|
||||
window = { border = 'rounded', },
|
||||
},
|
||||
|
||||
cmdline = {
|
||||
sources = {},
|
||||
},
|
||||
|
||||
sources = {
|
||||
default = {
|
||||
'lsp',
|
||||
'emoji',
|
||||
},
|
||||
providers = {
|
||||
emoji = {
|
||||
module = "blink-emoji",
|
||||
name = "Emoji",
|
||||
score_offset = 1,
|
||||
opts = { insert = true },
|
||||
}
|
||||
},
|
||||
},
|
||||
})
|
|
@ -4,23 +4,11 @@
|
|||
pkgs,
|
||||
...
|
||||
}:
|
||||
let
|
||||
nvim-remote = pkgs.writeShellApplication {
|
||||
name = "nvim-remote";
|
||||
text = ''
|
||||
_sess=$(echo -n "$USER@''${SSH_CONNECTION:-$HOSTNAME}" | tr -c '[:alnum:]@.' '_')
|
||||
_nvim_sock="''${XDG_RUNTIME_DIR:-/tmp}/nvim.$_sess.sock"
|
||||
exec nvim --listen "$_nvim_sock" --server "$_nvim_sock" "$@"
|
||||
'';
|
||||
};
|
||||
in
|
||||
{
|
||||
imports = [
|
||||
./treesitter.nix
|
||||
];
|
||||
|
||||
home.packages = [ nvim-remote ];
|
||||
|
||||
programs.man.generateCaches = false;
|
||||
|
||||
programs.neovim = {
|
||||
|
@ -36,39 +24,34 @@ in
|
|||
extraLuaConfig = lib.fileContents ./init.lua;
|
||||
|
||||
extraPackages = with pkgs; [
|
||||
black
|
||||
codeium
|
||||
cue
|
||||
go
|
||||
gopls
|
||||
gotools
|
||||
lua-language-server
|
||||
nil
|
||||
nixd
|
||||
nodePackages.prettier
|
||||
nodePackages.typescript
|
||||
nodePackages.typescript-language-server
|
||||
nodePackages.bash-language-server
|
||||
rust-analyzer
|
||||
rustfmt
|
||||
shellcheck
|
||||
shfmt
|
||||
stylua
|
||||
vscode-langservers-extracted
|
||||
];
|
||||
|
||||
plugins = with pkgs.vimPlugins; [
|
||||
blink-compat
|
||||
blink-emoji-nvim
|
||||
friendly-snippets
|
||||
go-nvim
|
||||
rustaceanvim
|
||||
targets-vim
|
||||
ts-comments-nvim
|
||||
|
||||
{
|
||||
plugin = pkgs.vimUtils.buildVimPlugin {
|
||||
name = "direnv-nvim";
|
||||
src = pkgs.fetchFromGitHub {
|
||||
owner = "actionshrimp";
|
||||
repo = "direnv.nvim";
|
||||
rev = "main";
|
||||
hash = "sha256-7NcVskgAurbIuEVIXxHvXZfYQBOEXLURGzllfVEQKNE=";
|
||||
};
|
||||
};
|
||||
type = "lua";
|
||||
config = ''
|
||||
require('direnv-nvim').setup {
|
||||
type = "dir"
|
||||
}
|
||||
'';
|
||||
}
|
||||
{
|
||||
plugin = nvim-lspconfig;
|
||||
type = "lua";
|
||||
|
@ -76,25 +59,47 @@ in
|
|||
}
|
||||
|
||||
{
|
||||
plugin = blink-cmp;
|
||||
plugin = pkgs.nixpkgs-unstable.vimPlugins.blink-cmp;
|
||||
type = "lua";
|
||||
config = lib.fileContents ./blink-cmp.lua;
|
||||
config = ''
|
||||
require'blink-cmp'.setup({
|
||||
keymap = {
|
||||
preset = 'enter',
|
||||
["<PageDown>"] = { "scroll_documentation_down" },
|
||||
["<PageUp>"] = { "scroll_documentation_up" },
|
||||
},
|
||||
trigger = {
|
||||
completion = {
|
||||
show_in_snippet = true,
|
||||
},
|
||||
signature_help = {
|
||||
enabled = true,
|
||||
},
|
||||
},
|
||||
windows = {
|
||||
autocomplete = {
|
||||
border = 'none',
|
||||
selection = 'preselect',
|
||||
},
|
||||
documentation = {
|
||||
border = 'rounded',
|
||||
auto_show = false,
|
||||
auto_show_delay_ms = 800,
|
||||
},
|
||||
signature_help = {
|
||||
border = 'rounded',
|
||||
},
|
||||
},
|
||||
})
|
||||
'';
|
||||
}
|
||||
|
||||
{
|
||||
plugin = pkgs.vimUtils.buildVimPlugin {
|
||||
name = "inlay-hints";
|
||||
src = pkgs.fetchFromGitHub {
|
||||
owner = "MysticalDevil";
|
||||
repo = "inlay-hints.nvim";
|
||||
rev = "3259b54f3b954b4d8260f3ee49ceabe978ea5636";
|
||||
hash = "sha256-99KCGoPowa4PA1jkCm4ZbbgrFl84NWnKQMgkfy8KS5E=";
|
||||
};
|
||||
};
|
||||
plugin = codeium-nvim;
|
||||
type = "lua";
|
||||
config = ''
|
||||
require('inlay-hints').setup {
|
||||
autocmd = { enable = false },
|
||||
require'codeium'.setup {
|
||||
enable_chat = false,
|
||||
}
|
||||
'';
|
||||
}
|
||||
|
@ -105,25 +110,43 @@ in
|
|||
src = pkgs.fetchFromGitHub {
|
||||
owner = "monkoose";
|
||||
repo = "neocodeium";
|
||||
rev = "a2b5257c736886ec3ccbd961766f8ab9c82b2a72"; # 2025-02-04
|
||||
hash = "sha256-mR2fzsdCVbh7nLcsSgQnhRivoKW6oFqJwuIYfz8OV0k=";
|
||||
rev = "4da81528468b33585c411f31eb390dce573ccb14"; # v1.8.0
|
||||
hash = "sha256-1n9nNqBNwNDSzbAkm8eB4HZLNy5HmMg25jPwQAnW5OU=";
|
||||
};
|
||||
doCheck = false;
|
||||
};
|
||||
type = "lua";
|
||||
config = ''
|
||||
local neocodeium =require('neocodeium')
|
||||
neocodeium.setup({
|
||||
show_label = false,
|
||||
debounce = true,
|
||||
silent = false,
|
||||
})
|
||||
neocodeium.setup()
|
||||
vim.keymap.set("i", "<C-j>", neocodeium.accept, { remap = true })
|
||||
vim.keymap.set("i", "<A-f>", neocodeium.accept, { remap = true })
|
||||
vim.keymap.set("i", "<C-h>", neocodeium.cycle_or_complete, { remap = true })
|
||||
'';
|
||||
}
|
||||
|
||||
{
|
||||
plugin = pkgs.vimUtils.buildVimPlugin {
|
||||
name = "diagflow";
|
||||
src = pkgs.fetchFromGitHub {
|
||||
owner = "dgagn";
|
||||
repo = "diagflow.nvim";
|
||||
rev = "fc09d55d2e60edc8ed8f9939ba97b7b7e6488c99";
|
||||
hash = "sha256-2WNuaIEXcAgUl2Kb/cCHEOrtehw9alaoM96qb4MLArw=";
|
||||
};
|
||||
};
|
||||
type = "lua";
|
||||
config = ''
|
||||
require('diagflow').setup {
|
||||
scope = "line",
|
||||
gap_size = 0,
|
||||
max_width = 50,
|
||||
max_height = 20,
|
||||
show_borders = true,
|
||||
toggle_event = { "InsertEnter", "InsertLeave" },
|
||||
}
|
||||
'';
|
||||
}
|
||||
|
||||
{
|
||||
plugin = pkgs.vimUtils.buildVimPlugin {
|
||||
name = "dieter-nvim";
|
||||
|
@ -131,7 +154,7 @@ in
|
|||
};
|
||||
type = "lua";
|
||||
config = ''
|
||||
vim.cmd.colorscheme "dieter-nocolor"
|
||||
vim.cmd.colorscheme "dieter"
|
||||
'';
|
||||
}
|
||||
|
||||
|
@ -140,13 +163,6 @@ in
|
|||
type = "lua";
|
||||
config = lib.fileContents ./mini.lua;
|
||||
}
|
||||
|
||||
{
|
||||
plugin = rustaceanvim;
|
||||
type = "lua";
|
||||
config = lib.fileContents ./rust.lua;
|
||||
}
|
||||
|
||||
];
|
||||
};
|
||||
}
|
||||
|
|
|
@ -1,2 +0,0 @@
|
|||
package.loaded["dieter"] = nil
|
||||
require("dieter").setup_nocolor()
|
|
@ -1,2 +1,2 @@
|
|||
package.loaded["dieter"] = nil
|
||||
require("dieter").setup()
|
||||
require("dieter")
|
||||
|
|
|
@ -2,28 +2,18 @@ local hsl = require("dieter.hsl").hslToHex
|
|||
|
||||
local colors = {
|
||||
light = {
|
||||
background = "NONE",
|
||||
foreground = "NONE",
|
||||
background = hsl(240, 100, 100),
|
||||
foreground = hsl(0, 0, 13),
|
||||
|
||||
accent1 = hsl(12, 100, 50),
|
||||
|
||||
dimmed = hsl(0, 0, 80),
|
||||
dimmed_subtle = hsl(0, 0, 20),
|
||||
|
||||
highlight_subtle = hsl(0, 0, 94),
|
||||
highlight = hsl(0, 0, 90),
|
||||
highlight_intense = hsl(42, 100, 30),
|
||||
|
||||
dialog_fg = hsl(230, 13, 10),
|
||||
dialog_bg = hsl(50, 15, 95),
|
||||
dialog_border = hsl(50, 25, 75),
|
||||
|
||||
string = hsl(96, 50, 33),
|
||||
comment = hsl(360, 66, 40),
|
||||
comment = hsl(230, 66, 40),
|
||||
comment_error = hsl(2, 85, 40),
|
||||
|
||||
suggestion = hsl(220, 95, 55),
|
||||
|
||||
diagnostic_error = hsl(347, 80, 45),
|
||||
diagnostic_warning = hsl(30, 100, 50),
|
||||
diagnostic_info = hsl(145, 80, 30),
|
||||
|
@ -39,51 +29,35 @@ local colors = {
|
|||
change = hsl(41, 80, 80),
|
||||
change_quarter = hsl(224, 100, 85),
|
||||
delete = hsl(350, 100, 40),
|
||||
delete_quarter = hsl(350, 100, 85),
|
||||
|
||||
selection = hsl(270, 45, 92),
|
||||
dialog_bg = hsl(224, 5, 92),
|
||||
selection = hsl(270, 75, 92),
|
||||
highlight_subtle = hsl(0, 0, 94),
|
||||
highlight_intense = hsl(42, 100, 30),
|
||||
|
||||
search_bg = hsl(43, 100, 8),
|
||||
search_fg = hsl(43, 100, 85),
|
||||
|
||||
cmp_bg = hsl(218, 30, 97),
|
||||
cmp_fg = hsl(218, 30, 13),
|
||||
cmp_selected_fg = hsl(218, 50, 8),
|
||||
cmp_selected_bg = hsl(218, 30, 85),
|
||||
|
||||
doc_bg = hsl(200, 30, 90),
|
||||
doc_fg = hsl(220, 80, 10),
|
||||
},
|
||||
|
||||
dark = {
|
||||
background = "NONE",
|
||||
foreground = "NONE",
|
||||
background = hsl(216, 28, 7),
|
||||
foreground = hsl(0, 0, 80),
|
||||
|
||||
accent1 = hsl(202, 57, 57), -- Blue
|
||||
accent2 = hsl(40, 57, 57), -- Yellow
|
||||
accent1 = hsl(12, 100, 50),
|
||||
|
||||
dimmed = hsl(212, 19, 25),
|
||||
dimmed_subtle = hsl(212, 19, 50),
|
||||
dimmed = hsl(0, 0, 25),
|
||||
dimmed_subtle = hsl(0, 0, 50),
|
||||
|
||||
highlight_subtle = hsl(212, 27, 11),
|
||||
highlight = hsl(212, 27, 18),
|
||||
highlight_subtle = hsl(0, 0, 6),
|
||||
highlight_intense = hsl(58, 100, 60),
|
||||
|
||||
dialog_fg = hsl(191, 15, 75),
|
||||
dialog_bg = "NONE",
|
||||
|
||||
string = hsl(90, 30, 60),
|
||||
comment = hsl(216, 30, 55),
|
||||
string = hsl(96, 50, 70),
|
||||
comment = hsl(220, 50, 60),
|
||||
comment_error = hsl(2, 85, 50),
|
||||
func = hsl(40, 57, 87),
|
||||
member = hsl(213, 45, 75),
|
||||
punc = hsl(213, 45, 50),
|
||||
|
||||
suggestion = hsl(158, 66, 40),
|
||||
|
||||
diagnostic_error = hsl(353, 100, 45),
|
||||
diagnostic_warning = hsl(30, 100, 50),
|
||||
diagnostic_info = hsl(176, 80, 60),
|
||||
diagnostic_hint = hsl(210, 74, 60),
|
||||
diagnostic_hint = hsl(176, 80, 60),
|
||||
|
||||
popup_error_bg = hsl(0, 95, 7),
|
||||
popup_warning_bg = hsl(27, 95, 7),
|
||||
|
@ -97,197 +71,145 @@ local colors = {
|
|||
delete = hsl(350, 100, 40),
|
||||
delete_quarter = hsl(350, 100, 15),
|
||||
|
||||
selection = hsl(218, 90, 20),
|
||||
|
||||
search_bg = hsl(43, 100, 8),
|
||||
search_fg = hsl(43, 100, 85),
|
||||
-- dialog_bg = background,
|
||||
-- dialog_fg = hsl(216, 70, 80),
|
||||
-- dialog_bg = hsl(216, 25, 20),
|
||||
-- selection = hsl(216, 25, 33),
|
||||
selection = hsl(213, 60, 40),
|
||||
|
||||
cmp_bg = hsl(218, 30, 13),
|
||||
cmp_fg = hsl(218, 30, 80),
|
||||
cmp_fg = hsl(218, 30, 60),
|
||||
cmp_selected_bg = hsl(218, 30, 25),
|
||||
cmp_selected_fg = hsl(218, 50, 80),
|
||||
|
||||
doc_bg = hsl(220, 80, 10),
|
||||
doc_fg = hsl(200, 30, 60),
|
||||
|
||||
suggestion = hsl(180, 55, 40),
|
||||
},
|
||||
|
||||
}
|
||||
|
||||
local setupGroups = function(c)
|
||||
local c = colors[vim.o.background]
|
||||
c.dialog_fg = c.foreground
|
||||
c.dialog_bg = c.background
|
||||
|
||||
return {
|
||||
Normal = { fg = c.foreground, bg = c.background },
|
||||
local theme = {
|
||||
Normal = { fg = c.foreground, bg = c.background },
|
||||
|
||||
Constant = { link = "NormalNC" },
|
||||
Delimiter = { link = "NormalNC" },
|
||||
Function = { fg = c.func },
|
||||
Identifier = { link = "NormalNC" },
|
||||
Keyword = { fg = c.foreground, bold = true },
|
||||
Operator = { link = "NormalNC" },
|
||||
Special = { link = "NormalNC" },
|
||||
Type = { link = "NormalNC" },
|
||||
Constant = { link = "NormalNC" },
|
||||
Delimiter = { link = "NormalNC" },
|
||||
Identifier = { link = "NormalNC" },
|
||||
Keyword = { fg = c.foreground, bold = true },
|
||||
Operator = { link = "NormalNC" },
|
||||
Special = { link = "NormalNC" },
|
||||
Type = { link = "NormalNC" },
|
||||
|
||||
MsgArea = { fg = c.dimmed_subtle },
|
||||
StatusLine = { fg = c.dimmed, bg = c.dimmed_subtle },
|
||||
String = { fg = c.string },
|
||||
|
||||
String = { fg = c.string },
|
||||
Comment = { fg = c.comment, italic = true, bold = true },
|
||||
CommentError = { fg = c.comment_error, italic = true, bold = true },
|
||||
["@comment.note"] = { link = "Comment" },
|
||||
["@comment.todo"] = { link = "CommentError" },
|
||||
["@comment.error"] = { link = "CommentError" },
|
||||
["@comment.warning"] = { link = "CommentError" },
|
||||
|
||||
Visual = { bg = c.selection },
|
||||
DiffAdd = { fg = c.add, bg = c.add_quarter },
|
||||
GitSignsAdd = { fg = c.add, bg = c.background },
|
||||
GitSignsAddNr = { link = "DiffAdd" },
|
||||
DiffChange = { fg = c.change, bg = c.change_quarter },
|
||||
GitSignsChange = { fg = c.change, bg = c.background },
|
||||
GitSignsChangeNr = { link = "DiffChange" },
|
||||
DiffDelete = { fg = c.delete, bg = c.delete_quarter },
|
||||
GitSignsDelete = { fg = c.delete, bg = c.background },
|
||||
GitSignsDeleteNr = { link = "DiffDelete" },
|
||||
|
||||
Search = { bg = c.search_bg, fg = c.search_fg },
|
||||
CurSearch = { link = "Search" },
|
||||
-- Treesitter
|
||||
["@function"] = { link = "NormalNC" },
|
||||
["@special"] = { link = "NormalNC" },
|
||||
["@variable"] = { link = "NormalNC" },
|
||||
["@lsp.type.variable"] = { fg = c.dimmed_subtle },
|
||||
|
||||
Comment = { fg = c.comment, italic = true },
|
||||
CommentError = { fg = c.comment_error, italic = true },
|
||||
["@comment.note"] = { link = "Comment" },
|
||||
["@comment.todo"] = { link = "CommentError" },
|
||||
["@comment.error"] = { link = "CommentError" },
|
||||
["@comment.warning"] = { link = "CommentError" },
|
||||
-- UI Elements
|
||||
CursorLine = { bg = c.highlight_subtle },
|
||||
|
||||
DiffAdd = { fg = c.add, bg = c.add_quarter },
|
||||
GitSignsAdd = { fg = c.add, bg = c.background },
|
||||
GitSignsAddNr = { link = "DiffAdd" },
|
||||
DiffChange = { fg = c.change, bg = c.change_quarter },
|
||||
GitSignsChange = { fg = c.change, bg = c.background },
|
||||
GitSignsChangeNr = { link = "DiffChange" },
|
||||
DiffDelete = { fg = c.delete, bg = c.delete_quarter },
|
||||
GitSignsDelete = { fg = c.delete, bg = c.background },
|
||||
GitSignsDeleteNr = { link = "DiffDelete" },
|
||||
DiagnosticError = { fg = c.diagnostic_error, italic = true },
|
||||
DiagnosticFloatingError = { fg = c.diagnostic_error, bg = c.popup_error_bg },
|
||||
DiagnosticFloatingWarn = { fg = c.diagnostic_warning, bg = c.popup_warning_bg },
|
||||
DiagnosticFloatingInfo = { fg = c.diagnostic_info, bg = c.popup_info_bg },
|
||||
DiagnosticFloatingHint = { fg = c.diagnostic_hint, bg = c.popup_hint_bg },
|
||||
DiagnosticUnderlineError = { fg = c.diagnostic_error, undercurl = true },
|
||||
DiagnosticUnderlineWarn = { fg = c.diagnostic_warn, undercurl = true },
|
||||
DiagnosticUnderlineInfo = { fg = c.diagnostic_info, undercurl = true },
|
||||
DiagnosticUnderlinehint = { fg = c.diagnostic_hint, undercurl = true },
|
||||
|
||||
-- Treesitter
|
||||
["@punctuation.special"] = { fg = c.punc },
|
||||
["@special"] = { link = "NormalNC" },
|
||||
["@variable"] = { link = "NormalNC" },
|
||||
["@variable.member"] = { fg = c.member },
|
||||
["@variable.parameter"] = { fg = c.accent2 },
|
||||
DiagnosticSignError = { fg = c.diagnostic_error },
|
||||
DiagnosticSignHint = { fg = c.diagnostic_hint },
|
||||
DiagnosticSignInfo = { fg = c.diagnostic_info },
|
||||
DiagnosticSignWarn = { fg = c.diagnostic_warning },
|
||||
LineNr = { fg = c.dimmed, italic = true },
|
||||
IndentLine = { fg = c.background },
|
||||
IndentLineCurrent = { fg = c.dimmed },
|
||||
TreesitterContext = { reverse = true },
|
||||
TreesitterContextLineNumber = { bg = c.dimmed, reverse = true, italic = true },
|
||||
InclineNormal = { bg = c.background },
|
||||
InclineNormalNC = { bg = c.background },
|
||||
|
||||
-- UI Elements
|
||||
CursorLine = { bg = c.highlight_subtle },
|
||||
WinSeparator = { bg = c.dialog_bg, fg = c.dialog_fg },
|
||||
NormalFloat = { bg = c.doc_bg, fg = c.doc_fg },
|
||||
FloatBorder = { fg = c.doc_fg },
|
||||
FloatTitle = { fg = c.doc_fg, bold = true },
|
||||
|
||||
DiagnosticError = { fg = c.diagnostic_error, italic = true },
|
||||
DiagnosticHint = { fg = c.diagnostic_hint, italic = true },
|
||||
DiagnosticInfo = { fg = c.diagnostic_info, italic = true },
|
||||
DiagnosticWarn = { fg = c.diagnostic_warn, italic = true },
|
||||
DiagnosticFloatingError = { fg = c.diagnostic_error, bg = c.dialog_bg },
|
||||
DiagnosticFloatingHint = { fg = c.diagnostic_hint, bg = c.dialog_bg },
|
||||
DiagnosticFloatingInfo = { fg = c.diagnostic_info, bg = c.dialog_bg },
|
||||
DiagnosticFloatingWarn = { fg = c.diagnostic_warning, bg = c.dialog_bg },
|
||||
DiagnosticUnderlineError = { fg = c.foreground, undercurl = true, sp = c.diagnostic_error },
|
||||
DiagnosticUnderlineHint = { fg = c.foreground, undercurl = true, sp = c.diagnostic_hint },
|
||||
DiagnosticUnderlineInfo = { fg = c.foreground, undercurl = true, sp = c.diagnostic_info },
|
||||
DiagnosticUnderlineWarn = { fg = c.foreground, undercurl = true, sp = c.diagnostic_warn },
|
||||
Title = { fg = c.foreground, bold = true },
|
||||
|
||||
DiagnosticSignError = { fg = c.diagnostic_error },
|
||||
DiagnosticSignHint = { fg = c.diagnostic_hint },
|
||||
DiagnosticSignInfo = { fg = c.diagnostic_info },
|
||||
DiagnosticSignWarn = { fg = c.diagnostic_warning },
|
||||
LineNr = { fg = c.dimmed },
|
||||
CursorLineNr = { fg = c.dimmed_subtle, bg = c.highlight_subtle },
|
||||
MiniPickNormal = { link = "Normal" },
|
||||
MiniPickBorder = { link = "MiniPickNormal" },
|
||||
MiniPickBorderText = { link = "MiniPickBorder" },
|
||||
MiniPickMatchCurrent = { bg = c.background, fg = c.foreground, reverse = true },
|
||||
|
||||
IndentLine = { fg = c.highlight },
|
||||
IndentLineCurrent = { fg = c.highlight },
|
||||
MiniIndentscopeSymbol = { link = "IndentLine" },
|
||||
MiniIndentscopeSymbolOff = { link = "IndentLine" },
|
||||
MiniClueBorder = { link = "MiniPickNormal" },
|
||||
MiniClueTitle = { bg = c.background, fg = c.foreground, bold = true },
|
||||
MiniClueNextKey = { link = "MiniClueTitle" },
|
||||
MiniClueDescGroup = { bg = c.background, fg = c.foreground, italic = true },
|
||||
MiniClueDescSingle = { bg = c.background, fg = c.foreground },
|
||||
MiniClueSeparator = { link = "MiniClueBorder" },
|
||||
|
||||
TreesitterContext = { reverse = true },
|
||||
TreesitterContextLineNumber = { bg = c.dimmed, reverse = true, italic = true },
|
||||
InclineNormal = { bg = c.background },
|
||||
InclineNormalNC = { bg = c.background },
|
||||
MiniStarterCurrent = { link = "MiniPickMatchCurrent" },
|
||||
|
||||
EndOfBuffer = { fg = c.dimmed },
|
||||
WinSeparator = { bg = c.dialog_bg, fg = c.dialog_fg },
|
||||
NormalFloat = { bg = c.dialog_bg, fg = c.foreground },
|
||||
FloatBorder = { bg = c.dialog_bg, fg = c.dialog_border },
|
||||
FloatTitle = { bg = c.dialog_bg, fg = c.dialog_border, bold = true },
|
||||
BlinkCmpMenu = { bg = c.cmp_bg, fg = c.cmp_fg },
|
||||
BlinkCmpMenuSelection = { bg = c.cmp_selected_bg, fg = c.cmp_selected_fg, reverse = false },
|
||||
BlinkCmpMenuBorder = { bg = c.cmp_bg, fg = c.cmp_fg },
|
||||
BlinkCmpLabel = { link = 'BlinkCmpMenu' },
|
||||
BlinkCmpLabelMatch = { link = 'BlinkCmpMenu', underline = true },
|
||||
|
||||
Title = { fg = c.foreground, bold = true },
|
||||
BlinkCmpDoc = { bg = c.doc_bg, fg = c.foreground },
|
||||
BlinkCmpDocBorder = { bg = c.doc_bg, fg = c.doc_fg },
|
||||
BlinkCmpDocDetail = { link = 'BlinkCmpDoc' },
|
||||
BlinkCmpSignatureHelp = { link = 'BlinkCmpDoc' },
|
||||
BlinkCmpSignatureHelpBorder = { link = 'BlinkCmpDocBorder' },
|
||||
|
||||
MiniPickNormal = { bg = c.dialog_bg, fg = c.dialog_fg },
|
||||
MiniPickBorder = { bg = c.dialog_bg, fg = c.dialog_border },
|
||||
MiniPickBorderText = { link = "MiniPickBorder" },
|
||||
MiniPickMatchCurrent = { bg = c.dialog_bg, fg = c.dialog_fg, reverse = true },
|
||||
NeoCodeiumSuggestion = { fg = c.suggestion , bold = true, italic = true },
|
||||
|
||||
MiniClueBorder = { link = "MiniPickBorder" },
|
||||
MiniClueTitle = { bg = c.dialog_bg, fg = c.dialog_border, bold = true },
|
||||
MiniClueNextKey = { link = "MiniClueTitle" },
|
||||
MiniClueDescGroup = { bg = c.dialog_bg, fg = c.foreground, italic = true },
|
||||
MiniClueDescSingle = { bg = c.dialog_bg, fg = c.foreground },
|
||||
MiniClueSeparator = { link = "MiniClueBorder" },
|
||||
NoiceMini = { fg = c.foreground, italic = true },
|
||||
|
||||
MiniCursorWord = { underdotted = true, bold = true, sp = c.diagnostic_hint },
|
||||
TelescopeNormal = { fg = c.foreground, bg = c.background },
|
||||
TelescopeBorder = { bold = true },
|
||||
TelescopeSelection = { bg = c.selection },
|
||||
TelescopeResultsNormal = { fg = c.foreground, bold = true },
|
||||
TelescopeResultsComment = { fg = c.dimmed_subtle, italic = true, bold = false },
|
||||
|
||||
MiniStarterCurrent = { link = "MiniPickMatchCurrent" },
|
||||
Visual = { bg = c.selection },
|
||||
LspReferenceText = { fg = c.highlight_intense, undercurl = true },
|
||||
}
|
||||
|
||||
BlinkCmpMenu = { bg = c.cmp_bg, fg = c.cmp_fg },
|
||||
BlinkCmpMenuSelection = { bg = c.cmp_selected_bg, fg = c.cmp_selected_fg, reverse = false },
|
||||
BlinkCmpMenuBorder = { bg = c.cmp_bg, fg = c.cmp_fg },
|
||||
BlinkCmpLabel = { link = 'BlinkCmpMenu' },
|
||||
BlinkCmpLabelMatch = { link = 'BlinkCmpMenu', underline = true },
|
||||
vim.cmd("hi clear")
|
||||
|
||||
BlinkCmpDoc = { bg = c.doc_bg, fg = c.foreground },
|
||||
BlinkCmpDocBorder = { bg = c.doc_bg, fg = c.doc_fg },
|
||||
BlinkCmpDocDetail = { link = 'BlinkCmpDoc' },
|
||||
BlinkCmpSignatureHelp = { link = 'BlinkCmpDoc' },
|
||||
BlinkCmpSignatureHelpBorder = { link = 'BlinkCmpDocBorder' },
|
||||
|
||||
BlinkCmpGhostText = { fg = c.suggestion, italic = true, bold = true },
|
||||
NeoCodeiumSuggestion = { link = 'BlinkCmpGhostText' },
|
||||
|
||||
LspReferenceText = { fg = c.highlight_intense, undercurl = true },
|
||||
LspInlayHint = { fg = c.accent1, italic = true, bold = true },
|
||||
}
|
||||
if vim.fn.exists("syntax_on") == 1 then
|
||||
vim.cmd("syntax reset")
|
||||
end
|
||||
|
||||
|
||||
local setupGroupsNoColor = function(c)
|
||||
local g = setupGroups(c)
|
||||
local cl = { link = "NormalNC" }
|
||||
g.Constant = cl
|
||||
g.Delimiter = cl
|
||||
g.Function = cl
|
||||
g.Identifier = cl
|
||||
g.Keyword = cl
|
||||
g.Operator = cl
|
||||
g["@punctuation.special"] = cl
|
||||
g["@special"] = cl
|
||||
g["@string"] = cl
|
||||
g["@lsp.type.string"] = cl
|
||||
g.Special = cl
|
||||
g.String = cl
|
||||
g.Type = cl
|
||||
g.Variable = cl
|
||||
g["@variable"] = cl
|
||||
g["@variable.member"] = cl
|
||||
g["@variable.parameter"] = cl
|
||||
-- g.Comment = { fg = c.dimmed_subtle, italic = true, bold = true }
|
||||
g.CommentError = { link = "Comment" }
|
||||
return g
|
||||
for group, hl in pairs(theme) do
|
||||
vim.api.nvim_set_hl(0, group, hl)
|
||||
end
|
||||
|
||||
local setup_common = function(groups)
|
||||
vim.cmd("hi clear")
|
||||
if vim.fn.exists("syntax_on") == 1 then
|
||||
vim.cmd("syntax reset")
|
||||
end
|
||||
for group, hl in pairs(groups) do
|
||||
vim.api.nvim_set_hl(0, group, hl)
|
||||
end
|
||||
end
|
||||
|
||||
local T = {}
|
||||
|
||||
T.setup = function()
|
||||
local c = colors[vim.o.background]
|
||||
local groups = setupGroups(c)
|
||||
setup_common(groups)
|
||||
vim.g.colors_name = "dieter"
|
||||
end
|
||||
|
||||
T.setup_nocolor = function()
|
||||
local c = colors[vim.o.background]
|
||||
local groups = setupGroupsNoColor(c)
|
||||
setup_common(groups)
|
||||
vim.g.colors_name = "dieter-nocolor"
|
||||
end
|
||||
|
||||
return T
|
||||
vim.g.colors_name = "dieter"
|
||||
|
|
|
@ -1,15 +1,12 @@
|
|||
vim.env.RIPGREP_CONFIG_PATH = vim.env.HOME .. "/.config/ripgrep/ripgreprc"
|
||||
|
||||
vim.g.mapleader = ' '
|
||||
vim.g.maplocalleader = ","
|
||||
|
||||
-- UI
|
||||
|
||||
vim.opt.cursorline = false
|
||||
vim.opt.guicursor =
|
||||
"n-v-c:block,i-ci-ve:ver25,r-cr:hor20,o:hor50,a:blinkwait700-blinkoff400-blinkon250-Cursor/lCursor,sm:block-blinkwait175-blinkoff150-blinkon175"
|
||||
vim.opt.number = false
|
||||
vim.opt.relativenumber = false
|
||||
vim.opt.cursorline = true
|
||||
vim.opt.laststatus = 0
|
||||
vim.opt.number = true
|
||||
vim.opt.relativenumber = true
|
||||
vim.opt.ruler = true
|
||||
vim.opt.syntax = "on"
|
||||
vim.opt.termguicolors = true
|
||||
|
@ -20,30 +17,12 @@ function GetIndicators()
|
|||
local counts = vim.diagnostic.count(bufnr)
|
||||
local errors = counts[vim.diagnostic.severity.ERROR] or 0
|
||||
local warnings = counts[vim.diagnostic.severity.WARN] or 0
|
||||
local warn_string = warnings > 0 and "%#DiagnosticWarn# " .. warnings .. " " or ""
|
||||
local error_string = errors > 0 and "%#DiagnosticError# " .. errors .. " " or ""
|
||||
local warn_string = warnings > 0 and "%#DiagnosticWarn# " .. warnings .. " " or " "
|
||||
local error_string = errors > 0 and "%#DiagnosticError# " .. errors .. " " or " "
|
||||
return warn_string .. error_string
|
||||
end
|
||||
|
||||
function CondensedPath()
|
||||
local path = vim.fn.expand("%:p")
|
||||
local home = os.getenv("HOME")
|
||||
if home then
|
||||
path = vim.fn.substitute(path, '^' .. home, '~', '')
|
||||
end
|
||||
|
||||
local segments = vim.fn.split(path, '/')
|
||||
if #segments <= 3 then
|
||||
return path
|
||||
end
|
||||
|
||||
local early_path = table.concat(vim.list_slice(segments, 1, #segments - 2), '/')
|
||||
local late_path = table.concat(vim.list_slice(segments, #segments - 1), '/')
|
||||
|
||||
return vim.fn.pathshorten(early_path) .. '/' .. late_path
|
||||
end
|
||||
|
||||
vim.opt.statusline = "%{%v:lua.CondensedPath()%}%=%{%v:lua.GetIndicators()%}%7(%l:%c%)"
|
||||
vim.opt.rulerformat = "%40(%=%{%v:lua.GetIndicators()%}%#Label#│ %t %)"
|
||||
|
||||
-- Search
|
||||
vim.opt.ignorecase = true
|
||||
|
@ -75,7 +54,7 @@ vim.opt.foldexpr = "nvim_treesitter#foldexpr()"
|
|||
|
||||
vim.o.autochdir = true
|
||||
vim.o.cia = 'kind,abbr,menu'
|
||||
vim.o.fillchars = "stl: ,stlnc: ,eob:🮘,vert:│"
|
||||
vim.o.fillchars = "stl: ,stlnc: ,eob:░,vert:│"
|
||||
vim.o.icm = "split"
|
||||
vim.o.list = false
|
||||
vim.o.scrolloff = 7
|
||||
|
@ -84,51 +63,31 @@ vim.o.showcmd = false
|
|||
vim.o.showmode = false
|
||||
vim.o.smoothscroll = true
|
||||
vim.o.splitkeep = "screen"
|
||||
vim.o.timeout = false
|
||||
vim.o.updatetime = 250
|
||||
vim.o.timeoutlen = 10
|
||||
vim.o.timeout = true
|
||||
vim.o.updatetime = 50
|
||||
|
||||
|
||||
-- Use rg
|
||||
vim.o.grepprg = [[rg --glob "!.jj" --glob "!.git" --no-heading --vimgrep --follow $*]]
|
||||
vim.opt.grepformat = vim.opt.grepformat ^ { "%f:%l:%c:%m" }
|
||||
|
||||
-- Diagnostics
|
||||
vim.diagnostic.config {
|
||||
float = {
|
||||
border = "rounded",
|
||||
header = "",
|
||||
source = "if_many",
|
||||
},
|
||||
severity_sort = true,
|
||||
signs = {
|
||||
linehl = {
|
||||
[vim.diagnostic.severity.ERROR] = "DiagnosticSignErrorLine",
|
||||
[vim.diagnostic.severity.WARN] = "DiagnosticSignWarnLine",
|
||||
[vim.diagnostic.severity.INFO] = "DiagnosticSignInfoLine",
|
||||
[vim.diagnostic.severity.HINT] = "DiagnostigSignHintLine",
|
||||
},
|
||||
numhl = {
|
||||
[vim.diagnostic.severity.ERROR] = "DiagnosticSignError",
|
||||
[vim.diagnostic.severity.WARN] = "DiagnosticSignWarn",
|
||||
[vim.diagnostic.severity.INFO] = "DiagnosticSignInfo",
|
||||
[vim.diagnostic.severity.HINT] = "DiagnostigSignHint",
|
||||
},
|
||||
text = {
|
||||
[vim.diagnostic.severity.ERROR] = "",
|
||||
[vim.diagnostic.severity.WARN] = "",
|
||||
[vim.diagnostic.severity.INFO] = "",
|
||||
[vim.diagnostic.severity.HINT] = "",
|
||||
},
|
||||
},
|
||||
virtual_lines = false,
|
||||
}
|
||||
vim.keymap.set('n', '<Space>ud', function()
|
||||
if vim.diagnostic.config().virtual_lines == true then
|
||||
-- vim.diagnostic.config({ virtual_lines = { current_line = true } })
|
||||
vim.diagnostic.config({ virtual_lines = false })
|
||||
else
|
||||
vim.diagnostic.config({ virtual_lines = true })
|
||||
end
|
||||
end, { desc = 'Toggle diagnostic virtual_lines' })
|
||||
vim.fn.sign_define(
|
||||
"DiagnosticSignError",
|
||||
{ text = "", hl = "DiagnosticSignError", texthl = "DiagnosticSignError", culhl = "DiagnosticSignErrorLine" }
|
||||
)
|
||||
vim.fn.sign_define(
|
||||
"DiagnosticSignWarn",
|
||||
{ text = "", hl = "DiagnosticSignWarn", texthl = "DiagnosticSignWarn", culhl = "DiagnosticSignWarnLine" }
|
||||
)
|
||||
vim.fn.sign_define(
|
||||
"DiagnosticSignInfo",
|
||||
{ text = "", hl = "DiagnosticSignInfo", texthl = "DiagnosticSignInfo", culhl = "DiagnosticSignInfoLine" }
|
||||
)
|
||||
vim.fn.sign_define(
|
||||
"DiagnosticSignHint",
|
||||
{ text = "", hl = "DiagnosticSignHint", texthl = "DiagnosticSignHint", culhl = "DiagnosticSignHintLine" }
|
||||
)
|
||||
|
||||
|
||||
-- Make <Tab> work for snippets
|
||||
|
@ -141,29 +100,6 @@ vim.keymap.set({ "i", "s" }, "<Tab>", function()
|
|||
end, { expr = true })
|
||||
|
||||
|
||||
-- Autoformat
|
||||
|
||||
vim.g.autoformat_enabled = true -- set to true by default
|
||||
|
||||
vim.api.nvim_create_user_command('ToggleAutoFormat', function()
|
||||
vim.g.autoformat_enabled = not vim.g.autoformat_enabled
|
||||
print('Autoformatting ' .. (vim.g.autoformat_enabled and 'enabled' or 'disabled'))
|
||||
end, {})
|
||||
|
||||
vim.api.nvim_create_augroup("AutoFormat", {})
|
||||
|
||||
vim.api.nvim_create_autocmd("BufWritePre", {
|
||||
group = "AutoFormat",
|
||||
callback = function()
|
||||
if vim.g.autoformat_enabled then
|
||||
vim.lsp.buf.format({
|
||||
async = false,
|
||||
timeout_ms = 2000 -- Adjust timeout as needed
|
||||
})
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
-- Keymap
|
||||
local opts = function(label)
|
||||
return { noremap = true, silent = true, desc = label }
|
||||
|
@ -179,29 +115,20 @@ vim.keymap.set({ "n", "v" }, "<Leader>a", vim.lsp.buf.code_action, { remap = tru
|
|||
vim.keymap.set("n", "<Leader>af", function()
|
||||
vim.lsp.buf.format({ async = true })
|
||||
end, opts("Format Buffer"))
|
||||
vim.keymap.set('n', '<Leader><Leader>', "<cmd>Pick visit_paths cwd=''<cr>", opts("Visits"))
|
||||
vim.keymap.set('n', '<Leader>b', "<cmd>Pick buffers<cr>", opts("Open buffer picker"))
|
||||
vim.keymap.set('n', '<Leader>/', "<cmd>Pick grep_live_root<cr>", opts("Search workspace files"))
|
||||
vim.keymap.set('n', '<Leader>d', vim.diagnostic.open_float, opts("Show diagnostics for line"))
|
||||
vim.keymap.set('n', '<m-d>', vim.diagnostic.open_float, opts("Show diagnostics for line"))
|
||||
vim.keymap.set('n', '<Leader>D', function()
|
||||
local width = vim.o.columns - 8
|
||||
MiniExtra.pickers.diagnostic({ scope = "current" }, { window = { config = { width = width } } })
|
||||
end, opts("Open diagnostics picker"))
|
||||
|
||||
vim.keymap.set('n', '<Leader>d', "<cmd>Pick diagnostic<cr>", opts("Open diagnostics picker"))
|
||||
vim.keymap.set("n", "<Leader>D", vim.diagnostic.setloclist, { desc = "Diagnostics to location list" })
|
||||
vim.keymap.set("n", "<Leader>r", vim.lsp.buf.rename, opts("Rename Symbol"))
|
||||
vim.keymap.set('n', '<Leader>F', "<cmd>Pick files<cr>", opts("Open file picker CWD"))
|
||||
vim.keymap.set('n', '<Leader>f', "<cmd>Pick files_root<cr>", opts("Open file picker"))
|
||||
vim.keymap.set('n', '<c-p>', "<Leader>f", { remap = true })
|
||||
vim.keymap.set('n', '<Leader>g', "<cmd>Pick oldfiles<cr>", opts("Open file picker history"))
|
||||
vim.keymap.set("n", '<Leader>k', vim.lsp.buf.hover, opts("Show docs for item under cursor"))
|
||||
vim.keymap.set('n', '<Leader>p', "<cmd>Pick projects<cr>", opts("Open projects picker"))
|
||||
vim.keymap.set('n', '<Leader>q', require('mini.bufremove').delete, opts("Delete buffer"))
|
||||
vim.keymap.set('n', '<Leader>s', "<cmd>Pick lsp scope='document_symbol'<cr>", opts("Open symbol picker"))
|
||||
vim.keymap.set('n', '<Leader>S', "<cmd>Pick lsp scope='workspace_symbol'<cr>", opts("Open workspace symbol picker"))
|
||||
vim.keymap.set("n", "<Leader>ws", "<C-w>s", opts("Horizontal split"))
|
||||
vim.keymap.set("n", "<Leader>wv", "<C-w>v", opts("Vertical split"))
|
||||
vim.keymap.set("n", "<m-f>", require('mini.files').open, opts("Open file manager"))
|
||||
vim.keymap.set('n', '<tab>', "<cmd>Pick buffers include_current=false<cr>", opts("Buffers"))
|
||||
vim.keymap.set("n", "zz", "zt", { remap = true })
|
||||
vim.keymap.set({ "n", "v" }, "<Leader>y", '"+y', opts("Yank to clipboard"))
|
||||
|
@ -219,23 +146,6 @@ vim.keymap.set("n", "K", function()
|
|||
max_width = 80,
|
||||
offset_x = 2,
|
||||
}
|
||||
end, {})
|
||||
vim.keymap.set("n", "<Leader>ub", function()
|
||||
vim.o.background = (vim.o.background == "light" and "dark" or "light")
|
||||
end, opts("Toggle dark/light background"))
|
||||
vim.keymap.set("n", "<Leader>uc", function()
|
||||
if vim.g.colors_name == "dieter-nocolor" then
|
||||
vim.cmd [[colorscheme dieter]]
|
||||
else
|
||||
vim.cmd [[colorscheme dieter-nocolor]]
|
||||
end
|
||||
end, opts("Toggle Dieter colors"))
|
||||
vim.keymap.set("n", "<Leader>uf", "<cmd>ToggleAutoFormat<cr>", opts("Toggle autoformat on save"))
|
||||
vim.keymap.set("n", "<Leader>uh", "<cmd>InlayHintsToggle<cr>", opts("Toggle inlay hints"))
|
||||
vim.keymap.set("n", "<Leader>ul", "<cmd>set invcursorline<cr>", opts("Toggle cursor line"))
|
||||
vim.keymap.set("n", "<Leader>un", "<cmd>set invnumber<cr>", opts("Toggle line numbers"))
|
||||
vim.keymap.set("n", "<Leader>uw", "<cmd>set invwrap<cr>", opts("Toggle line wrapping"))
|
||||
end, {})
|
||||
|
||||
|
||||
vim.keymap.set("n", "<Leader>ui", function()
|
||||
vim.g.miniindentscope_disable = not vim.g.miniindentscope_disable
|
||||
end, opts("Toggle indent scope"))
|
||||
|
|
|
@ -1,60 +1,44 @@
|
|||
local configs = require('lspconfig.configs')
|
||||
local lspconfig = require("lspconfig")
|
||||
local capabilities = vim.lsp.protocol.make_client_capabilities()
|
||||
local servers = {
|
||||
cssls = {},
|
||||
html = {},
|
||||
jsonls = {},
|
||||
sqls = {},
|
||||
superhtml = {},
|
||||
ts_ls = {},
|
||||
|
||||
gopls = {
|
||||
settings = {
|
||||
gopls = {
|
||||
hints = {
|
||||
rangeVariableTypes = true,
|
||||
parameterNames = true,
|
||||
constantValues = true,
|
||||
assignVariableTypes = true,
|
||||
compositeLiteralFields = true,
|
||||
compositeLiteralTypes = true,
|
||||
functionTypeParameters = true,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
lua_ls = {
|
||||
settings = {
|
||||
Lua = {
|
||||
runtime = {
|
||||
version = "LuaJIT",
|
||||
path = vim.split(package.path, ";"),
|
||||
},
|
||||
diagnostics = { globals = { "vim", "hs" } },
|
||||
hint = { enable = true },
|
||||
workspace = {
|
||||
library = {
|
||||
[vim.fn.expand("$VIMRUNTIME/lua")] = true,
|
||||
[vim.fn.expand("$VIMRUNTIME/lua/vim/lsp")] = true,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
nixd = {
|
||||
cmd = { "nixd" },
|
||||
settings = {
|
||||
nixd = {
|
||||
nixpkgs = { expr = "import <nixpkgs> { }" },
|
||||
formatting = { command = { "nixfmt" } },
|
||||
options = {},
|
||||
},
|
||||
},
|
||||
},
|
||||
'gopls',
|
||||
'ts_ls',
|
||||
}
|
||||
|
||||
for server, config in pairs(servers) do
|
||||
config.capabilities = require('blink.cmp').get_lsp_capabilities(config.capabilities)
|
||||
lspconfig[server].setup(config)
|
||||
for _, ls in ipairs(servers) do
|
||||
lspconfig[ls].setup {
|
||||
capabilities = capabilities,
|
||||
}
|
||||
end
|
||||
|
||||
lspconfig.nixd.setup({
|
||||
capabilities = capabilities,
|
||||
cmd = { "nixd" },
|
||||
settings = {
|
||||
nixd = {
|
||||
nixpkgs = { expr = "import <nixpkgs> { }" },
|
||||
formatting = { command = { "nixfmt" } },
|
||||
options = {},
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
lspconfig.lua_ls.setup({
|
||||
capabilities = capabilities,
|
||||
settings = {
|
||||
Lua = {
|
||||
runtime = {
|
||||
version = "LuaJIT",
|
||||
path = vim.split(package.path, ";"),
|
||||
},
|
||||
diagnostics = { globals = { "vim", "hs" } },
|
||||
workspace = {
|
||||
library = {
|
||||
[vim.fn.expand("$VIMRUNTIME/lua")] = true,
|
||||
[vim.fn.expand("$VIMRUNTIME/lua/vim/lsp")] = true,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
|
|
|
@ -5,13 +5,11 @@ require('mini.bufremove').setup()
|
|||
require('mini.comment').setup()
|
||||
require('mini.diff').setup()
|
||||
require('mini.extra').setup()
|
||||
require('mini.files').setup()
|
||||
require('mini.icons').setup()
|
||||
require('mini.jump').setup()
|
||||
require('mini.surround').setup()
|
||||
require('mini.splitjoin').setup()
|
||||
require('mini.trailspace').setup()
|
||||
require('mini.visits').setup()
|
||||
|
||||
require('mini.cursorword').setup({
|
||||
delay = 800
|
||||
|
@ -37,7 +35,6 @@ indentscope.setup({
|
|||
},
|
||||
symbol = '│',
|
||||
})
|
||||
vim.g.miniindentscope_disable = true
|
||||
|
||||
require('mini.jump2d').setup({
|
||||
mappings = { start_jumping = 'gw' }
|
||||
|
@ -52,14 +49,13 @@ local picker_win_config = function()
|
|||
height = height,
|
||||
width = width,
|
||||
row = 2,
|
||||
col = 5,
|
||||
col = math.floor((vim.o.columns - width) / 2),
|
||||
}
|
||||
end
|
||||
|
||||
require('mini.pick').setup({
|
||||
mappings = {
|
||||
move_down = '<tab>',
|
||||
move_up = '<S-tab>',
|
||||
toggle_info = '<C-k>',
|
||||
toggle_preview = '<C-p>',
|
||||
},
|
||||
|
@ -68,58 +64,13 @@ require('mini.pick').setup({
|
|||
config = picker_win_config,
|
||||
},
|
||||
})
|
||||
|
||||
local MiniPick = require('mini.pick')
|
||||
MiniPick.registry.projects = function(local_opts)
|
||||
local root = vim.fn.expand("~/src")
|
||||
|
||||
local command = {
|
||||
"fd",
|
||||
"--max-depth=8",
|
||||
"--one-file-system",
|
||||
"--unrestricted",
|
||||
"--full-path",
|
||||
"/.jj/repo/store/type$|/.git/HEAD$",
|
||||
root,
|
||||
}
|
||||
|
||||
local postprocess = function(paths)
|
||||
local result = {}
|
||||
local seen = {}
|
||||
for _, path in ipairs(paths) do
|
||||
path = path:gsub("%/.jj/repo/store/type$", "")
|
||||
path = path:gsub("%/.git/HEAD$", "")
|
||||
if not seen[path] then
|
||||
local item = {
|
||||
path = path,
|
||||
text = path:gsub("%" .. root .. "/", " "),
|
||||
}
|
||||
table.insert(result, item)
|
||||
seen[path] = true
|
||||
end
|
||||
end
|
||||
return result
|
||||
end
|
||||
|
||||
local choose = function(item)
|
||||
local_opts.cwd = item.path
|
||||
vim.fn.chdir(item.path)
|
||||
vim.schedule(function()
|
||||
MiniPick.builtin.files(local_opts, { source = { cwd = item.path, tool = "rg" } })
|
||||
end)
|
||||
end
|
||||
|
||||
return MiniPick.builtin.cli({ command = command, postprocess = postprocess }, { source = { choose = choose } })
|
||||
end
|
||||
|
||||
MiniPick.registry.files_root = function(local_opts)
|
||||
local root_patterns = { ".jj", ".git" }
|
||||
local root_dir = vim.fs.dirname(vim.fs.find(root_patterns, { upward = true })[1])
|
||||
local_opts.cwd = root_dir
|
||||
local_opts.tool = "rg"
|
||||
return MiniPick.builtin.files(local_opts, { source = { cwd = root_dir, tool = "rg" } })
|
||||
return MiniPick.builtin.files(local_opts, { source = { cwd = root_dir, tool = "ripgrep" } })
|
||||
end
|
||||
|
||||
MiniPick.registry.grep_live_root = function(local_opts)
|
||||
local root_patterns = { ".jj", ".git" }
|
||||
local root_dir = vim.fs.dirname(vim.fs.find(root_patterns, { upward = true })[1])
|
||||
|
@ -128,56 +79,59 @@ MiniPick.registry.grep_live_root = function(local_opts)
|
|||
end
|
||||
|
||||
require("mini.pick").registry.buffers = function(local_opts, opts)
|
||||
local_opts = vim.tbl_deep_extend(
|
||||
"force",
|
||||
{ sort_lastused = false, sort_mru = true, include_current = true, include_unlisted = false },
|
||||
local_opts or {}
|
||||
)
|
||||
local buffers_output = vim.api.nvim_exec("buffers" .. (local_opts.include_unlisted and "!" or ""), true)
|
||||
local cur_buf_id, include_current = vim.api.nvim_get_current_buf(), local_opts.include_current
|
||||
local items = {}
|
||||
local default_selection_idx = 1
|
||||
for _, l in ipairs(vim.split(buffers_output, "\n")) do
|
||||
local buf_str, name = l:match("^%s*%d+"), l:match('"(.*)"')
|
||||
local buf_id = tonumber(buf_str)
|
||||
local flag = buf_id == vim.fn.bufnr("") and "%" or (buf_id == vim.fn.bufnr("#") and "#" or " ")
|
||||
local item = { text = name, bufnr = buf_id, flag = flag }
|
||||
if buf_id ~= cur_buf_id or include_current then
|
||||
if local_opts.sort_lastused and not local_opts.ignore_current_buffer and flag == "#" then
|
||||
default_selection_idx = 2
|
||||
end
|
||||
if local_opts.sort_lastused and (flag == "#" or flag == "%") then
|
||||
local idx = ((items[1] ~= nil and items[1].flag == "%") and 2 or 1)
|
||||
table.insert(items, idx, item)
|
||||
else
|
||||
table.insert(items, item)
|
||||
end
|
||||
end
|
||||
end
|
||||
if local_opts.sort_mru then
|
||||
table.sort(items, function(a, b)
|
||||
return vim.fn.getbufinfo(a.bufnr)[1].lastused > vim.fn.getbufinfo(b.bufnr)[1].lastused
|
||||
end)
|
||||
end
|
||||
local_opts = vim.tbl_deep_extend(
|
||||
"force",
|
||||
{ sort_lastused = false, sort_mru = true, include_current = true, include_unlisted = false },
|
||||
local_opts or {}
|
||||
)
|
||||
local buffers_output = vim.api.nvim_exec("buffers" .. (local_opts.include_unlisted and "!" or ""), true)
|
||||
local cur_buf_id, include_current = vim.api.nvim_get_current_buf(), local_opts.include_current
|
||||
local items = {}
|
||||
local default_selection_idx = 1
|
||||
for _, l in ipairs(vim.split(buffers_output, "\n")) do
|
||||
local buf_str, name = l:match("^%s*%d+"), l:match('"(.*)"')
|
||||
local buf_id = tonumber(buf_str)
|
||||
local flag = buf_id == vim.fn.bufnr("") and "%" or (buf_id == vim.fn.bufnr("#") and "#" or " ")
|
||||
local item = { text = name, bufnr = buf_id, flag = flag }
|
||||
if buf_id ~= cur_buf_id or include_current then
|
||||
if local_opts.sort_lastused and not local_opts.ignore_current_buffer and flag == "#" then
|
||||
default_selection_idx = 2
|
||||
end
|
||||
if local_opts.sort_lastused and (flag == "#" or flag == "%") then
|
||||
local idx = ((items[1] ~= nil and items[1].flag == "%") and 2 or 1)
|
||||
table.insert(items, idx, item)
|
||||
else
|
||||
table.insert(items, item)
|
||||
end
|
||||
end
|
||||
end
|
||||
if local_opts.sort_mru then
|
||||
table.sort(items, function(a, b)
|
||||
return vim.fn.getbufinfo(a.bufnr)[1].lastused > vim.fn.getbufinfo(b.bufnr)[1].lastused
|
||||
end)
|
||||
end
|
||||
|
||||
local show = function(buf_id, items, query)
|
||||
require("mini.pick").default_show(buf_id, items, query, { show_icons = true })
|
||||
end
|
||||
local default_opts = { source = { name = "Buffers", show = show } }
|
||||
opts = vim.tbl_deep_extend("force", default_opts, opts or {}, { source = { items = items } })
|
||||
if default_selection_idx > 1 then
|
||||
vim.api.nvim_create_autocmd("User", {
|
||||
pattern = "MiniPickStart",
|
||||
once = true,
|
||||
callback = function()
|
||||
local mappings = require("mini.pick").get_picker_opts().mappings
|
||||
local keys = vim.fn["repeat"](mappings.move_down, default_selection_idx - 1)
|
||||
vim.api.nvim_input(vim.api.nvim_replace_termcodes(keys, true, true, true))
|
||||
end,
|
||||
})
|
||||
end
|
||||
return require("mini.pick").start(opts)
|
||||
end
|
||||
|
||||
|
||||
|
||||
local show = function(buf_id, items, query)
|
||||
require("mini.pick").default_show(buf_id, items, query, { show_icons = true })
|
||||
end
|
||||
local default_opts = { source = { name = "Buffers", show = show } }
|
||||
opts = vim.tbl_deep_extend("force", default_opts, opts or {}, { source = { items = items } })
|
||||
if default_selection_idx > 1 then
|
||||
vim.api.nvim_create_autocmd("User", {
|
||||
pattern = "MiniPickStart",
|
||||
once = true,
|
||||
callback = function()
|
||||
local mappings = require("mini.pick").get_picker_opts().mappings
|
||||
local keys = vim.fn["repeat"](mappings.move_down, default_selection_idx - 1)
|
||||
vim.api.nvim_input(vim.api.nvim_replace_termcodes(keys, true, true, true))
|
||||
end,
|
||||
})
|
||||
end
|
||||
return require("mini.pick").start(opts)
|
||||
end
|
||||
|
||||
local miniclue = require('mini.clue')
|
||||
miniclue.setup({ -- cute prompts about bindings
|
||||
|
@ -248,14 +202,11 @@ require('mini.notify').setup({
|
|||
|
||||
require('mini.starter').setup({
|
||||
header =
|
||||
[[
|
||||
████████▄ ▄▄ ▒▒
|
||||
██ ▀██ ██
|
||||
██ ▄██ ▄██████▄ ██████ ▄██████▄ ▄████▄██ ██ ▄██████▄
|
||||
████████▀ ▀▀ ██ ██ ▀▀ ██ ██▀ ▀██ ██ ▀▀ ██
|
||||
██ ▄███████ ██ ▄███████ ██ ██ ██ ▄███████
|
||||
██ ██ ██ ██ ██ ██ ██▄ ▄██ ██ ██ ██
|
||||
██ ▀████▀██ ▀███ ▀████▀██ ▀████▀██ ██ ▀████▀██
|
||||
▄▄ ██
|
||||
▀██████▀ ]]
|
||||
[[ ______ _
|
||||
(_____ \ _ (_)
|
||||
_____) )___| |_ ____ ____ _ ____
|
||||
| ____/ _ | _)/ _ |/ _ | |/ _ |
|
||||
| | ( ( | | |_( ( | ( ( | | ( ( | |
|
||||
|_| \_||_|\___)_||_|\_|| |_|\_||_|
|
||||
(_____|]]
|
||||
})
|
||||
|
|
|
@ -1,40 +0,0 @@
|
|||
vim.g.rustaceanvim = {
|
||||
server = {
|
||||
settings = {
|
||||
["rust-analyzer"] = {
|
||||
inlayHints = {
|
||||
bindingModeHints = {
|
||||
enable = false,
|
||||
},
|
||||
chainingHints = {
|
||||
enable = true,
|
||||
},
|
||||
closingBraceHints = {
|
||||
enable = true,
|
||||
minLines = 25,
|
||||
},
|
||||
closureReturnTypeHints = {
|
||||
enable = "never",
|
||||
},
|
||||
lifetimeElisionHints = {
|
||||
enable = "never",
|
||||
useParameterNames = false,
|
||||
},
|
||||
maxLength = 25,
|
||||
parameterHints = {
|
||||
enable = true,
|
||||
},
|
||||
reborrowHints = {
|
||||
enable = "never",
|
||||
},
|
||||
renderColons = true,
|
||||
typeHints = {
|
||||
enable = true,
|
||||
hideClosureInitialization = false,
|
||||
hideNamedConstructor = false,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
|
@ -11,9 +11,8 @@
|
|||
];
|
||||
|
||||
plugins = with pkgs.vimPlugins; [
|
||||
nvim-ts-context-commentstring
|
||||
playground
|
||||
ts-comments-nvim
|
||||
nvim-ts-context-commentstring
|
||||
|
||||
{
|
||||
plugin = nvim-treesitter-context;
|
||||
|
@ -44,6 +43,20 @@
|
|||
'';
|
||||
}
|
||||
|
||||
{
|
||||
plugin = pkgs.vimUtils.buildVimPlugin {
|
||||
name = "nvim-tree-pairs"; # make % match in TS
|
||||
src = pkgs.fetchFromGitHub {
|
||||
owner = "yorickpeterse";
|
||||
repo = "nvim-tree-pairs";
|
||||
rev = "e7f7b6cc28dda6f3fa271ce63b0d371d5b7641da";
|
||||
hash = "sha256-fb4EsrWAbm8+dWAhiirCPuR44MEg+KYb9hZOIuEuT24=";
|
||||
};
|
||||
};
|
||||
type = "lua";
|
||||
config = "require('tree-pairs').setup()";
|
||||
}
|
||||
|
||||
{
|
||||
plugin = nvim-treesitter-textobjects;
|
||||
type = "lua";
|
||||
|
|
|
@ -25,6 +25,7 @@
|
|||
set -g status-right '%F | %R'
|
||||
set -g status off
|
||||
set -g update-environment "SSH_AUTH_SOCK"
|
||||
setenv -g "SSH_AUTH_SOCK" "$XDG_RUNTIME_DIR/ssh-agent"
|
||||
setw -g alternate-screen on
|
||||
setw -g automatic-rename off
|
||||
setw -g window-status-format ""
|
||||
|
@ -33,15 +34,16 @@
|
|||
|
||||
set -s command-alias[1000] stty='run-shell "tmux send-keys \"stty cols #{pane_width} rows #{pane_height}\" Enter"'
|
||||
|
||||
bind -n C-2 if-shell 'tmux select-window -t t1' refresh-client 'new-window -S -n t1'
|
||||
bind -n C-3 if-shell 'tmux select-window -t t2' refresh-client 'new-window -S -n t2'
|
||||
bind -n C-4 if-shell 'tmux select-window -t t3' refresh-client 'new-window -S -n t3'
|
||||
bind -n C-5 if-shell 'tmux select-window -t t4' refresh-client 'new-window -S -n t4'
|
||||
bind -n C-6 if-shell 'tmux select-window -t t5' refresh-client 'new-window -S -n t5'
|
||||
bind -n C-7 if-shell 'tmux select-window -t t6' refresh-client 'new-window -S -n t6'
|
||||
bind -n C-8 if-shell 'tmux select-window -t t7' refresh-client 'new-window -S -n t7'
|
||||
bind -n C-9 if-shell 'tmux select-window -t t8' refresh-client 'new-window -S -n t8'
|
||||
bind -n C-0 if-shell 'tmux select-window -t t9' refresh-client 'new-window -S -n t9'
|
||||
bind -n M-1 if-shell 'tmux select-window -t nvim' refresh-client 'new-window -S -n nvim nvim --listen $XDG_RUNTIME_DIR/nvim-persistent.sock'
|
||||
bind -n M-2 if-shell 'tmux select-window -t t1' refresh-client 'new-window -S -n t1'
|
||||
bind -n M-3 if-shell 'tmux select-window -t t2' refresh-client 'new-window -S -n t2'
|
||||
bind -n M-4 if-shell 'tmux select-window -t t3' refresh-client 'new-window -S -n t3'
|
||||
bind -n M-5 if-shell 'tmux select-window -t t4' refresh-client 'new-window -S -n t4'
|
||||
bind -n M-6 if-shell 'tmux select-window -t t5' refresh-client 'new-window -S -n t5'
|
||||
bind -n M-7 if-shell 'tmux select-window -t t6' refresh-client 'new-window -S -n t6'
|
||||
bind -n M-8 if-shell 'tmux select-window -t t7' refresh-client 'new-window -S -n t7'
|
||||
bind -n M-9 if-shell 'tmux select-window -t t8' refresh-client 'new-window -S -n t8'
|
||||
bind -n M-0 if-shell 'tmux select-window -t t9' refresh-client 'new-window -S -n t9'
|
||||
bind -T copy-mode-vi WheelUpPane select-pane \; send-keys -X -N 1 scroll-up
|
||||
bind -T copy-mode-vi WheelDownPane select-pane \; send-keys -X -N 1 scroll-down
|
||||
bind C-s set-option -g status
|
||||
|
|
|
@ -1,14 +1,13 @@
|
|||
{ pkgs, ... }:
|
||||
{
|
||||
home.packages = with pkgs; [
|
||||
grc
|
||||
dust
|
||||
jless
|
||||
procs
|
||||
viddy
|
||||
];
|
||||
|
||||
home.sessionVariables.DIRENV_LOG_FORMAT = ''$(printf "\033[2mdirenv: %%s\033[0m")'';
|
||||
|
||||
programs = {
|
||||
bat = {
|
||||
enable = true;
|
||||
|
@ -34,6 +33,11 @@
|
|||
};
|
||||
};
|
||||
|
||||
eza = {
|
||||
enable = true;
|
||||
enableFishIntegration = true;
|
||||
};
|
||||
|
||||
fd.enable = true;
|
||||
|
||||
fzf = {
|
||||
|
@ -49,29 +53,17 @@
|
|||
ripgrep = {
|
||||
enable = true;
|
||||
arguments = [
|
||||
"--glob=!**/.cache/*"
|
||||
"--glob=!**/.direnv/*"
|
||||
"--glob=!**/.git/*"
|
||||
"--glob=!**/.jj/*"
|
||||
"--glob=!**/{node_modules,.npm,dist}/*"
|
||||
"--glob=!**/target/*"
|
||||
"--glob=!**/result/*"
|
||||
"--glob=!.git/*"
|
||||
"--glob=!.jj/*"
|
||||
"--glob=!result/*"
|
||||
"--glob=!target/*"
|
||||
];
|
||||
};
|
||||
|
||||
zoxide = {
|
||||
enable = true;
|
||||
enableFishIntegration = true;
|
||||
options = [ "--cmd=cd" ];
|
||||
};
|
||||
};
|
||||
|
||||
programs.eza = {
|
||||
enable = true;
|
||||
enableFishIntegration = true;
|
||||
};
|
||||
home.sessionVariables.EZA_COLORS = "reset:oc=0:ur=0:uw=0:ux=0:ue=0:gr=0:gw=0:gx=0:tr=0:tw=0:tx=0:su=0:sf=0:xa=0:sn=0:nb=0:nk=0:nm=0:ng=0:nt=0:sb=0:ub=0:uk=0:um=0:ug=0:ut=0:df=0:ds=0:uu=0:uR=0:un=0:gu=0:gR=0:gn=0:lc=0:lm=0:ga=0:gm=0:gd=0:gv=0:gt=0:gi=0:gc=0:Gm=0:Go=0:Gc=0:Gd=0:xx=0:da=0:in=0:bl=0:hd=0:lp=4:cc=0:bO=0:sp=0:mp=0:im=0:vi=0:mu=0:lo=0:cr=0:do=0:co=0:tm=0:cm=0:bu=0:sc=0:ic=0:Sn=0:Su=0:Sr=0:St=0:Sl=0:ff=0:di=1:ex=0:fi=0:pi=0:so=0:bd=0:cd=0:ln=4:or=4";
|
||||
|
||||
programs.zoxide = {
|
||||
enable = true;
|
||||
enableFishIntegration = true;
|
||||
options = [ "--cmd=cd" ];
|
||||
};
|
||||
home.sessionVariables._ZO_FZF_OPTS = "--reverse --height=10 --border=rounded --no-info --no-separator --no-scrollbar --no-color --no-sort";
|
||||
|
||||
}
|
||||
|
|
|
@ -1,9 +1,4 @@
|
|||
{
|
||||
config,
|
||||
inputs,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
{ config, pkgs, ... }:
|
||||
{
|
||||
|
||||
home.packages = with pkgs; [
|
||||
|
@ -12,6 +7,7 @@
|
|||
difftastic
|
||||
git-get
|
||||
git-graph
|
||||
lazyjj
|
||||
tea
|
||||
];
|
||||
|
||||
|
@ -120,12 +116,9 @@
|
|||
"*.so"
|
||||
"*.swp"
|
||||
".direnv"
|
||||
".env"
|
||||
".idea"
|
||||
".nixos-test-history"
|
||||
".null-ls_*"
|
||||
"/result*"
|
||||
"/target"
|
||||
"result"
|
||||
];
|
||||
|
||||
signing = {
|
||||
|
@ -134,7 +127,45 @@
|
|||
};
|
||||
};
|
||||
|
||||
programs.gitui = {
|
||||
enable = true;
|
||||
keyConfig = ''
|
||||
(
|
||||
open_help: Some(( code: F(1), modifiers: "")),
|
||||
move_left: Some(( code: Char('h'), modifiers: "")),
|
||||
move_right: Some(( code: Char('l'), modifiers: "")),
|
||||
move_up: Some(( code: Char('k'), modifiers: "")),
|
||||
move_down: Some(( code: Char('j'), modifiers: "")),
|
||||
popup_up: Some(( code: Char('p'), modifiers: "CONTROL")),
|
||||
popup_down: Some(( code: Char('n'), modifiers: "CONTROL")),
|
||||
page_up: Some(( code: Char('b'), modifiers: "CONTROL")),
|
||||
page_down: Some(( code: Char('f'), modifiers: "CONTROL")),
|
||||
home: Some(( code: Char('g'), modifiers: "")),
|
||||
end: Some(( code: Char('G'), modifiers: "SHIFT")),
|
||||
shift_up: Some(( code: Char('K'), modifiers: "SHIFT")),
|
||||
shift_down: Some(( code: Char('J'), modifiers: "SHIFT")),
|
||||
edit_file: Some(( code: Char('I'), modifiers: "SHIFT")),
|
||||
status_reset_item: Some(( code: Char('U'), modifiers: "SHIFT")),
|
||||
diff_reset_lines: Some(( code: Char('u'), modifiers: "")),
|
||||
diff_stage_lines: Some(( code: Char('s'), modifiers: "")),
|
||||
stashing_save: Some(( code: Char('w'), modifiers: "")),
|
||||
stashing_toggle_index: Some(( code: Char('m'), modifiers: "")),
|
||||
stash_open: Some(( code: Char('l'), modifiers: "")),
|
||||
abort_merge: Some(( code: Char('M'), modifiers: "SHIFT")),
|
||||
)
|
||||
'';
|
||||
theme = ''
|
||||
(
|
||||
selection_bg: Some(Black),
|
||||
selection_fg: Some(Reset),
|
||||
cmdbar_bg: Some(Reset),
|
||||
cmdbar_extra_lines_bg: Some(Reset),
|
||||
)
|
||||
'';
|
||||
};
|
||||
|
||||
programs.jujutsu = {
|
||||
enable = true;
|
||||
package = pkgs.jujutsu-openssh;
|
||||
};
|
||||
}
|
||||
|
|
|
@ -1,72 +0,0 @@
|
|||
{
|
||||
config,
|
||||
lib,
|
||||
...
|
||||
}:
|
||||
{
|
||||
config = lib.mkIf config.patagia.desktop.enable {
|
||||
programs.wezterm = {
|
||||
enable = true;
|
||||
colorSchemes = {
|
||||
patagiaLight = {
|
||||
ansi = [
|
||||
"#222222"
|
||||
"#D14949"
|
||||
"#48874F"
|
||||
"#AFA75A"
|
||||
"#599797"
|
||||
"#8F6089"
|
||||
"#5C9FA8"
|
||||
"#8C8C8C"
|
||||
];
|
||||
brights = [
|
||||
"#444444"
|
||||
"#FF6D6D"
|
||||
"#89FF95"
|
||||
"#FFF484"
|
||||
"#97DDFF"
|
||||
"#FDAAF2"
|
||||
"#85F5DA"
|
||||
"#E9E9E9"
|
||||
];
|
||||
background = "#fefeff";
|
||||
foreground = "#222222";
|
||||
cursor_bg = "#aa0000";
|
||||
cursor_border = "#aa0000";
|
||||
cursor_fg = "#1B1B1B";
|
||||
selection_bg = "#ffe6a4";
|
||||
selection_fg = "#483600";
|
||||
};
|
||||
};
|
||||
|
||||
extraConfig = ''
|
||||
return {
|
||||
font = wezterm.font("Berkeley Mono", { weight = "Regular", stretch = "Normal" }),
|
||||
font_size = 16,
|
||||
-- freetype_load_target = "HorizontalLcd",
|
||||
freetype_load_target = "Light",
|
||||
-- font_size = 11,
|
||||
-- font_size = 11,
|
||||
-- freetype_load_target = "Normal",
|
||||
freetype_load_flags = "NO_AUTOHINT",
|
||||
color_scheme = "patagiaLight",
|
||||
check_for_updates = false,
|
||||
custom_block_glyphs = false,
|
||||
warn_about_missing_glyphs = false,
|
||||
bold_brightens_ansi_colors = false,
|
||||
unicode_version = 14,
|
||||
allow_square_glyphs_to_overflow_width = "Always",
|
||||
xcursor_theme = "Adwaita",
|
||||
hide_mouse_cursor_when_typing = false,
|
||||
tab_bar_at_bottom = true,
|
||||
use_fancy_tab_bar = false,
|
||||
show_tab_index_in_tab_bar = true,
|
||||
underline_position = -4,
|
||||
underline_thickness = 2,
|
||||
--line_height = 0.95,
|
||||
}
|
||||
'';
|
||||
|
||||
};
|
||||
};
|
||||
}
|
|
@ -1,4 +1,4 @@
|
|||
{ pkgs, ... }:
|
||||
{ inputs, pkgs, ... }:
|
||||
{
|
||||
patagia = {
|
||||
desktop.enable = true;
|
||||
|
@ -7,17 +7,15 @@
|
|||
home.packages = with pkgs; [
|
||||
cameractrls-gtk4
|
||||
dynamic-wallpaper
|
||||
gimp
|
||||
gimpPlugins.bimp
|
||||
gimp-with-plugins
|
||||
inkscape
|
||||
libreoffice
|
||||
inputs.ghostty.packages.${pkgs.system}.default
|
||||
moonlight-qt
|
||||
obsidian
|
||||
pavucontrol
|
||||
plexamp
|
||||
signal-desktop
|
||||
spotify
|
||||
thunderbird
|
||||
zed-editor
|
||||
];
|
||||
|
||||
xdg.desktopEntries = {
|
||||
|
|
|
@ -5,9 +5,10 @@
|
|||
./desktop.nix
|
||||
];
|
||||
|
||||
patagia = {
|
||||
laptop.enable = true;
|
||||
oled.enable = true;
|
||||
dconf.settings = {
|
||||
"org/gnome/shell" = {
|
||||
enabled-extensions = [ "Battery-Health-Charging@maniacx.github.com" ];
|
||||
};
|
||||
};
|
||||
|
||||
home.packages = with pkgs; [ ];
|
||||
|
@ -15,6 +16,6 @@
|
|||
programs.gpg.enable = true;
|
||||
services.gpg-agent = {
|
||||
enable = true;
|
||||
pinentry.package = pkgs.pinentry-curses;
|
||||
pinentryPackage = pkgs.pinentry-curses;
|
||||
};
|
||||
}
|
||||
|
|
|
@ -1,9 +1,4 @@
|
|||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
{ config, pkgs, ... }:
|
||||
let
|
||||
realName = "Daniel Lundin";
|
||||
email = "dln@arity.se";
|
||||
|
@ -14,8 +9,8 @@ in
|
|||
homeDirectory = "/home/dln";
|
||||
packages = with pkgs; [
|
||||
asciinema
|
||||
openconnect
|
||||
ouch
|
||||
toolbox
|
||||
];
|
||||
};
|
||||
|
||||
|
@ -43,6 +38,7 @@ in
|
|||
|
||||
programs.helix = {
|
||||
enable = true;
|
||||
# extraPackages = [];
|
||||
};
|
||||
|
||||
programs.jujutsu = {
|
||||
|
@ -53,7 +49,7 @@ in
|
|||
};
|
||||
|
||||
signing = {
|
||||
behavior = "own";
|
||||
sign-all = true;
|
||||
backend = "ssh";
|
||||
backends.ssh.allowed-signers = "/home/dln/.ssh/authorized_keys";
|
||||
key = "/home/dln/.ssh/git_signing_key.pub";
|
||||
|
@ -64,13 +60,19 @@ in
|
|||
};
|
||||
|
||||
ui = {
|
||||
"default-command" = [ "s" ];
|
||||
"default-command" = [
|
||||
"log"
|
||||
"--limit=10"
|
||||
"-T"
|
||||
"builtin_log_comfortable"
|
||||
];
|
||||
pager = "delta";
|
||||
};
|
||||
|
||||
"merge-tools" = {
|
||||
difft."diff-args" = [
|
||||
"--color=always"
|
||||
"--missing-as-empty"
|
||||
"$left"
|
||||
"$right"
|
||||
];
|
||||
|
@ -79,6 +81,7 @@ in
|
|||
"diff-args" = [
|
||||
"--color=always"
|
||||
"--display=inline"
|
||||
"--missing-as-empty"
|
||||
"$left"
|
||||
"$right"
|
||||
];
|
||||
|
@ -104,35 +107,23 @@ in
|
|||
];
|
||||
d = [
|
||||
"diff"
|
||||
"--tool=difft"
|
||||
"--tool=difftu"
|
||||
];
|
||||
dd = [
|
||||
"diff"
|
||||
"--git"
|
||||
];
|
||||
du = [
|
||||
ds = [
|
||||
"diff"
|
||||
"--tool=difftu"
|
||||
"--tool=difft"
|
||||
];
|
||||
s = [
|
||||
"util"
|
||||
"exec"
|
||||
"--"
|
||||
"bash"
|
||||
"-c"
|
||||
''
|
||||
#!/usr/bin/env bash
|
||||
set -eo pipefail
|
||||
printf '\e[38;5;240m\u2504%.0s\e[0m' $(seq 1 $(tput cols)) '\n'
|
||||
jj show --stat
|
||||
printf '\e[38;5;240m\u2504%.0s\e[0m' $(seq 1 $(tput cols)) '\n'
|
||||
if [ -n "$1" ]; then
|
||||
jj diff --tool=difft -r "$@"
|
||||
else
|
||||
jj log --limit=15 -T builtin_log_comfortable
|
||||
fi
|
||||
''
|
||||
""
|
||||
"show"
|
||||
"--tool=difftu"
|
||||
];
|
||||
ss = [
|
||||
"show"
|
||||
"--tool=difft"
|
||||
];
|
||||
};
|
||||
|
||||
|
@ -145,137 +136,26 @@ in
|
|||
"ready" = "open() ~ (wip::)";
|
||||
};
|
||||
|
||||
colors =
|
||||
let
|
||||
bold = {
|
||||
bold = true;
|
||||
};
|
||||
dim = {
|
||||
fg = "bright black";
|
||||
};
|
||||
underline = {
|
||||
fg = "default";
|
||||
underline = true;
|
||||
};
|
||||
in
|
||||
{
|
||||
"error" = bold;
|
||||
"warning" = bold;
|
||||
"error heading" = bold;
|
||||
"error_source heading" = bold;
|
||||
"warning heading" = bold;
|
||||
"hint heading" = bold;
|
||||
"prefix" = bold;
|
||||
"rest" = "bright black";
|
||||
"divergent prefix" = underline;
|
||||
"bookmark" = "bright magenta";
|
||||
"bookmarks" = "bright magenta";
|
||||
"change_id" = "bright magenta";
|
||||
"local_bookmarks" = "bright magenta";
|
||||
colors = {
|
||||
"commit_id prefix" = {
|
||||
bold = true;
|
||||
};
|
||||
|
||||
"diff file_header" = bold;
|
||||
"diff hunk_header" = "cyan";
|
||||
"diff removed" = "red";
|
||||
"diff removed token" = "red";
|
||||
"diff added" = "green";
|
||||
"diff added token" = "green";
|
||||
"diff modified" = "cyan";
|
||||
"diff untracked" = "blue";
|
||||
"diff renamed" = "cyan";
|
||||
"diff copied" = "green";
|
||||
"diff access-denied" = {
|
||||
bg = "red";
|
||||
};
|
||||
|
||||
"empty" = "green";
|
||||
"elided" = "blue";
|
||||
"node elided" = dim;
|
||||
"node working_copy" = {
|
||||
fg = "green";
|
||||
bold = true;
|
||||
};
|
||||
"node current_operation" = bold;
|
||||
"node immutable" = bold;
|
||||
"node conflict" = {
|
||||
fg = "red";
|
||||
bold = true;
|
||||
};
|
||||
"operation id" = "blue";
|
||||
"operation current_operation" = bold;
|
||||
"remote_bookmarks" = "bright magenta";
|
||||
"working_copy" = {
|
||||
fg = "green";
|
||||
bold = true;
|
||||
};
|
||||
"working_copy empty" = {
|
||||
fg = "green";
|
||||
bold = true;
|
||||
};
|
||||
"working_copy change_id" = "bright magenta";
|
||||
"working_copy description placeholder" = "green";
|
||||
"working_copy empty description placeholder" = "green";
|
||||
"working_copy bookmark" = "bright magenta";
|
||||
"working_copy bookmarks" = "bright magenta";
|
||||
"working_copy local_bookmarks" = "bright magenta";
|
||||
"working_copy remote_bookmarks" = "bright magenta";
|
||||
}
|
||||
// lib.genAttrs [
|
||||
"author"
|
||||
"branch"
|
||||
"branches"
|
||||
"commit_id"
|
||||
"committer"
|
||||
"config_list name"
|
||||
"config_list overridden"
|
||||
"config_list overridden name"
|
||||
"config_list overridden value"
|
||||
"config_list value"
|
||||
"conflict"
|
||||
"conflict_description"
|
||||
"conflict_description difficult"
|
||||
"description placeholder"
|
||||
"diff token"
|
||||
"divergent"
|
||||
"divergent change_id"
|
||||
"divergent rest"
|
||||
"empty description placeholder"
|
||||
"error_source"
|
||||
"git_head"
|
||||
"git_refs"
|
||||
"hidden prefix"
|
||||
"hint"
|
||||
"local_branches"
|
||||
"operation current_operation id"
|
||||
"operation current_operation time"
|
||||
"operation current_operation user"
|
||||
"operation time"
|
||||
"operation user"
|
||||
"placeholder"
|
||||
"remote_branches"
|
||||
"root"
|
||||
"separator"
|
||||
"tag"
|
||||
"tags"
|
||||
"timestamp"
|
||||
"working_copies"
|
||||
"working_copy author"
|
||||
"working_copy branch"
|
||||
"working_copy branches"
|
||||
"working_copy commit_id"
|
||||
"working_copy committer"
|
||||
"working_copy conflict"
|
||||
"working_copy divergent"
|
||||
"working_copy divergent change_id"
|
||||
"working_copy git_refs"
|
||||
"working_copy local_branches"
|
||||
"working_copy placeholder"
|
||||
"working_copy remote_branches"
|
||||
"working_copy tag"
|
||||
"working_copy tags"
|
||||
"working_copy timestamp"
|
||||
"working_copy working_copies"
|
||||
] (_: "default");
|
||||
"rest" = {
|
||||
fg = "bright black";
|
||||
bold = false;
|
||||
};
|
||||
|
||||
"diff added token" = {
|
||||
bg = "#002200";
|
||||
fg = "#66ffcc";
|
||||
underline = false;
|
||||
};
|
||||
"diff removed token" = {
|
||||
bg = "#220011";
|
||||
underline = true;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
|
@ -284,12 +164,12 @@ in
|
|||
'';
|
||||
|
||||
programs.ssh.matchBlocks = {
|
||||
dev-old = {
|
||||
dev = {
|
||||
hostname = "10.1.100.16";
|
||||
forwardAgent = true;
|
||||
};
|
||||
|
||||
devel = {
|
||||
nemo = {
|
||||
hostname = "10.1.100.20";
|
||||
forwardAgent = true;
|
||||
localForwards = [
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
];
|
||||
|
||||
programs.ghostty.settings = {
|
||||
font-size = lib.mkForce 15;
|
||||
font-size = lib.mkForce 18;
|
||||
};
|
||||
|
||||
programs.obs-studio = {
|
||||
|
@ -24,17 +24,13 @@
|
|||
};
|
||||
};
|
||||
|
||||
home.packages = with pkgs; [
|
||||
endeavour
|
||||
picard
|
||||
stable.calibre
|
||||
];
|
||||
home.packages = with pkgs; [ stable.calibre ];
|
||||
|
||||
programs.gpg.enable = true;
|
||||
|
||||
services.gpg-agent = {
|
||||
enable = true;
|
||||
enableScDaemon = false;
|
||||
pinentry.package = pkgs.pinentry-curses;
|
||||
pinentryPackage = pkgs.pinentry-curses;
|
||||
};
|
||||
}
|
||||
|
|
40
home/lsjostro/home.nix
Normal file
40
home/lsjostro/home.nix
Normal file
|
@ -0,0 +1,40 @@
|
|||
{ pkgs, ... }:
|
||||
{
|
||||
home = {
|
||||
username = "lsjostro";
|
||||
homeDirectory = "/home/lsjostro";
|
||||
packages = with pkgs; [ openconnect ];
|
||||
};
|
||||
|
||||
programs.git = {
|
||||
userName = "Lars Sjöstrom";
|
||||
userEmail = "lars@radicore.se";
|
||||
};
|
||||
|
||||
programs.ssh.matchBlocks = {
|
||||
dev = {
|
||||
hostname = "10.1.100.17";
|
||||
};
|
||||
|
||||
nemo = {
|
||||
hostname = "10.1.100.20";
|
||||
forwardAgent = true;
|
||||
localForwards = [
|
||||
{
|
||||
bind.address = "localhost";
|
||||
bind.port = 8000;
|
||||
host.address = "localhost";
|
||||
host.port = 8000;
|
||||
}
|
||||
{
|
||||
bind.address = "localhost";
|
||||
bind.port = 8080;
|
||||
host.address = "localhost";
|
||||
host.port = 8080;
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
|
||||
home.stateVersion = "24.05"; # https://nixos.wiki/wiki/FAQ/When_do_I_update_stateVersion
|
||||
}
|
6
home/lsjostro/nemo.nix
Normal file
6
home/lsjostro/nemo.nix
Normal file
|
@ -0,0 +1,6 @@
|
|||
{ ... }:
|
||||
{
|
||||
imports = [ ./home.nix ];
|
||||
|
||||
# Host specific user config goes here
|
||||
}
|
|
@ -78,10 +78,10 @@
|
|||
|
||||
networking = {
|
||||
hostName = "dinky";
|
||||
domain = "aarn.patagia.net";
|
||||
domain = "aarn.patagia.dev";
|
||||
search = [
|
||||
"patagia.net"
|
||||
"aarn.patagia.net"
|
||||
"patagia.dev"
|
||||
"aarn.patagia.dev"
|
||||
];
|
||||
useDHCP = lib.mkDefault true;
|
||||
};
|
||||
|
@ -120,7 +120,7 @@
|
|||
nix.settings.trusted-users = [ "dln" ];
|
||||
nix.buildMachines = [
|
||||
{
|
||||
hostName = "nemo.aarn.patagia.net";
|
||||
hostName = "nemo.aarn.patagia.dev";
|
||||
sshUser = "nixremote";
|
||||
sshKey = "/root/.ssh/id_ed25519";
|
||||
system = "x86_64-linux";
|
||||
|
@ -138,8 +138,8 @@
|
|||
nix.distributedBuilds = true;
|
||||
nix.settings.builders-use-substitutes = true;
|
||||
nix.settings.trusted-substituters = [
|
||||
"ssh-ng://nemo.aarn.patagia.net"
|
||||
"ssh-ng://nemo.aarn.patagia.dev"
|
||||
];
|
||||
|
||||
system.stateVersion = "25.05"; # Did you read the comment?
|
||||
system.stateVersion = "24.05"; # Did you read the comment?
|
||||
}
|
||||
|
|
|
@ -87,7 +87,7 @@
|
|||
|
||||
networking = {
|
||||
hostName = "nemo"; # Define your hostname.
|
||||
domain = "aarn.patagia.net";
|
||||
domain = "aarn.patagia.dev";
|
||||
nameservers = [
|
||||
"10.1.100.11"
|
||||
"10.1.100.12"
|
||||
|
@ -117,33 +117,34 @@
|
|||
|
||||
systemd.network.enable = true;
|
||||
systemd.network.networks."10-wifi" = {
|
||||
matchConfig.Name = "wlan0";
|
||||
matchConfig.Name = "wlan1";
|
||||
address = [ "10.1.100.20/22" ];
|
||||
gateway = [ "10.1.100.1" ];
|
||||
linkConfig.RequiredForOnline = "routable";
|
||||
};
|
||||
|
||||
# FIXME: pam_rssh is broken from rust 1.80 upgrade
|
||||
security = {
|
||||
pam.services.doas =
|
||||
{ config, ... }:
|
||||
{
|
||||
rules.auth.rssh = {
|
||||
order = config.rules.auth.ssh_agent_auth.order - 1;
|
||||
control = "sufficient";
|
||||
modulePath = "${pkgs.pam_rssh}/lib/libpam_rssh.so";
|
||||
settings.authorized_keys_command = pkgs.writeShellScript "get-authorized-keys" ''
|
||||
cat "/etc/ssh/authorized_keys.d/$1"
|
||||
'';
|
||||
};
|
||||
};
|
||||
};
|
||||
# environment.systemPackages = [ pkgs.pam_rssh ];
|
||||
# security = {
|
||||
# pam.services.doas =
|
||||
# { config, ... }:
|
||||
# {
|
||||
# rules.auth.rssh = {
|
||||
# order = config.rules.auth.ssh_agent_auth.order - 1;
|
||||
# control = "sufficient";
|
||||
# modulePath = "${pkgs.pam_rssh}/lib/libpam_rssh.so";
|
||||
# settings.authorized_keys_command = pkgs.writeShellScript "get-authorized-keys" ''
|
||||
# cat "/etc/ssh/authorized_keys.d/$1"
|
||||
# '';
|
||||
# };
|
||||
# };
|
||||
# };
|
||||
|
||||
services.resolved = {
|
||||
enable = true;
|
||||
domains = [
|
||||
"patagia.net"
|
||||
"aarn.patagia.net"
|
||||
"patagia.dev"
|
||||
"aarn.patagia.dev"
|
||||
];
|
||||
llmnr = "false";
|
||||
fallbackDns = [ "9.9.9.9" ];
|
||||
|
@ -158,6 +159,12 @@
|
|||
};
|
||||
};
|
||||
|
||||
services.sunshine = {
|
||||
enable = true;
|
||||
openFirewall = true;
|
||||
settings = { };
|
||||
};
|
||||
|
||||
patagia = {
|
||||
desktop.enable = true;
|
||||
plymouth.enable = true;
|
||||
|
@ -168,29 +175,17 @@
|
|||
ffado
|
||||
libcamera
|
||||
lm_sensors
|
||||
pam_rssh
|
||||
# pkgs.pam_rssh
|
||||
openconnect
|
||||
tpm2-tools
|
||||
v4l-utils
|
||||
];
|
||||
|
||||
environment.variables = {
|
||||
OTEL_EXPORTER_OTLP_ENDPOINT = "https://otel.aarn.patagia.net";
|
||||
};
|
||||
|
||||
security.tpm2 = {
|
||||
enable = true;
|
||||
pkcs11.enable = true;
|
||||
tctiEnvironment.enable = true;
|
||||
};
|
||||
programs.coolercontrol.enable = true;
|
||||
|
||||
users.users.dln = {
|
||||
isNormalUser = true;
|
||||
description = "Daniel Lundin";
|
||||
extraGroups = [
|
||||
"tss"
|
||||
"wheel"
|
||||
];
|
||||
extraGroups = [ "wheel" ];
|
||||
openssh.authorizedKeys.keys = [
|
||||
"sk-ssh-ed25519@openssh.com AAAAGnNrLXNzaC1lZDI1NTE5QG9wZW5zc2guY29tAAAAIIHMAEZx02kbHrEygyPQYStiXlrIe6EIqBCv7anIkL0pAAAABHNzaDo= dln@dinky"
|
||||
"sk-ssh-ed25519@openssh.com AAAAGnNrLXNzaC1lZDI1NTE5QG9wZW5zc2guY29tAAAAIJNOBFoU7Cdsgi4KpYRcv7EhR/8kD4DYjEZnwk6urRx7AAAABHNzaDo= dln@nemo"
|
||||
|
@ -200,10 +195,7 @@
|
|||
users.users.lsjostro = {
|
||||
isNormalUser = true;
|
||||
description = "Lars Sjöström";
|
||||
extraGroups = [
|
||||
"tss"
|
||||
"wheel"
|
||||
];
|
||||
extraGroups = [ "wheel" ];
|
||||
openssh.authorizedKeys.keys = [
|
||||
"sk-ecdsa-sha2-nistp256@openssh.com AAAAInNrLWVjZHNhLXNoYTItbmlzdHAyNTZAb3BlbnNzaC5jb20AAAAIbmlzdHAyNTYAAABBBJ10mLOpInoqDaySyrxbzvcOrJfLw48Y6eWHa9501lw+hEEBXya3ib7nlvpCqEQJ8aPU5fVRqpkOW5zSimCiRbwAAAAEc3NoOg=="
|
||||
"sk-ecdsa-sha2-nistp256@openssh.com AAAAInNrLWVjZHNhLXNoYTItbmlzdHAyNTZAb3BlbnNzaC5jb20AAAAIbmlzdHAyNTYAAABBBLpoKvsZDIQQLfgzJhe1jAQubBNxjydkj8UfdUPaSXqgfB02OypMOC1m5ZuJYcQIxox0I+4Z8xstFhYP6s8zKZwAAAAEc3NoOg=="
|
||||
|
@ -221,22 +213,11 @@
|
|||
};
|
||||
users.groups.nixremote = { };
|
||||
|
||||
nix.sshServe.enable = true;
|
||||
nix.sshServe.keys = [
|
||||
"sk-ssh-ed25519@openssh.com AAAAGnNrLXNzaC1lZDI1NTE5QG9wZW5zc2guY29tAAAAIIHMAEZx02kbHrEygyPQYStiXlrIe6EIqBCv7anIkL0pAAAABHNzaDo= dln@dinky"
|
||||
"sk-ssh-ed25519@openssh.com AAAAGnNrLXNzaC1lZDI1NTE5QG9wZW5zc2guY29tAAAAIJNOBFoU7Cdsgi4KpYRcv7EhR/8kD4DYjEZnwk6urRx7AAAABHNzaDo= dln@nemo"
|
||||
"sk-ecdsa-sha2-nistp256@openssh.com AAAAInNrLWVjZHNhLXNoYTItbmlzdHAyNTZAb3BlbnNzaC5jb20AAAAIbmlzdHAyNTYAAABBBJ10mLOpInoqDaySyrxbzvcOrJfLw48Y6eWHa9501lw+hEEBXya3ib7nlvpCqEQJ8aPU5fVRqpkOW5zSimCiRbwAAAAEc3NoOg=="
|
||||
"sk-ecdsa-sha2-nistp256@openssh.com AAAAInNrLWVjZHNhLXNoYTItbmlzdHAyNTZAb3BlbnNzaC5jb20AAAAIbmlzdHAyNTYAAABBBLpoKvsZDIQQLfgzJhe1jAQubBNxjydkj8UfdUPaSXqgfB02OypMOC1m5ZuJYcQIxox0I+4Z8xstFhYP6s8zKZwAAAAEc3NoOg=="
|
||||
];
|
||||
|
||||
nix.settings.trusted-users = [
|
||||
"dln"
|
||||
"lsjostro"
|
||||
"nixremote"
|
||||
];
|
||||
|
||||
services.printing.enable = lib.mkForce true;
|
||||
services.printing.drivers = [ pkgs.brlaser ];
|
||||
|
||||
system.stateVersion = "24.11"; # https://nixos.wiki/wiki/FAQ/When_do_I_update_stateVersion
|
||||
system.stateVersion = "24.05"; # https://nixos.wiki/wiki/FAQ/When_do_I_update_stateVersion
|
||||
}
|
||||
|
|
|
@ -4,20 +4,6 @@
|
|||
...
|
||||
}:
|
||||
{
|
||||
|
||||
users.users.woodpecker = {
|
||||
isSystemUser = true;
|
||||
group = "woodpecker";
|
||||
extraGroups = [
|
||||
"docker"
|
||||
"podman"
|
||||
];
|
||||
createHome = true;
|
||||
home = "/etc/woodpecker";
|
||||
homeMode = "764";
|
||||
};
|
||||
users.groups.woodpecker = { };
|
||||
|
||||
services.woodpecker-agents.agents.docker = {
|
||||
enable = true;
|
||||
package = pkgs.woodpecker-agent;
|
||||
|
@ -41,11 +27,7 @@
|
|||
];
|
||||
# restartIfChanged = false;
|
||||
serviceConfig = {
|
||||
User = "woodpecker";
|
||||
Group = "woodpecker";
|
||||
WorkingDirectory = "/etc/woodpecker";
|
||||
BindPaths = [ "/run/podman/podman.sock" ];
|
||||
};
|
||||
};
|
||||
|
||||
}
|
||||
|
|
|
@ -33,10 +33,10 @@
|
|||
|
||||
networking = {
|
||||
hostName = "pearl";
|
||||
domain = "aarn.patagia.net";
|
||||
domain = "aarn.patagia.dev";
|
||||
search = [
|
||||
"patagia.dev"
|
||||
"aarn.patagia.net"
|
||||
"aarn.patagia.dev"
|
||||
];
|
||||
useDHCP = lib.mkDefault true;
|
||||
};
|
||||
|
@ -99,7 +99,7 @@
|
|||
console.keyMap = "sv-latin1";
|
||||
|
||||
# Enable sound with pipewire.
|
||||
services.pulseaudio.enable = false;
|
||||
hardware.pulseaudio.enable = false;
|
||||
security.rtkit.enable = true;
|
||||
services.pipewire = {
|
||||
enable = true;
|
||||
|
|
3
justfile
3
justfile
|
@ -4,6 +4,9 @@ set shell := ["/usr/bin/env", "bash", "-euo", "pipefail", "-c"]
|
|||
default:
|
||||
@just --list
|
||||
|
||||
boot:
|
||||
nh os boot .
|
||||
|
||||
build:
|
||||
nh os build .
|
||||
|
||||
|
|
|
@ -7,9 +7,7 @@
|
|||
|
||||
# https://discourse.nixos.org/t/disable-ssh-agent-from-gnome-keyring-on-gnome/28176/5
|
||||
gnome-keyring = prev.gnome-keyring.overrideAttrs (oldAttrs: {
|
||||
mesonFlags = (builtins.filter (flag: flag != "-Dssh-agent=true") oldAttrs.mesonFlags) ++ [
|
||||
"-Dssh-agent=false"
|
||||
];
|
||||
configureFlags = oldAttrs.configureFlags or [ ] ++ [ "--disable-ssh-agent" ];
|
||||
});
|
||||
};
|
||||
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
pkgs: {
|
||||
gnome-ssh-askpass4 = pkgs.callPackage ./gnome-ssh-askpass4 { };
|
||||
jujutsu-openssh = pkgs.callPackage ./jujutsu-openssh { };
|
||||
lazyjj = pkgs.callPackage ./lazyjj { };
|
||||
}
|
||||
|
|
3828
pkgs/jujutsu-openssh/Cargo.lock
generated
Normal file
3828
pkgs/jujutsu-openssh/Cargo.lock
generated
Normal file
File diff suppressed because it is too large
Load diff
89
pkgs/jujutsu-openssh/default.nix
Normal file
89
pkgs/jujutsu-openssh/default.nix
Normal file
|
@ -0,0 +1,89 @@
|
|||
{
|
||||
lib,
|
||||
fetchFromGitHub,
|
||||
rustPlatform,
|
||||
pkg-config,
|
||||
openssl,
|
||||
gzip,
|
||||
libgit2,
|
||||
openssh,
|
||||
zstd,
|
||||
installShellFiles,
|
||||
nix-update-script,
|
||||
testers,
|
||||
jujutsu-openssh,
|
||||
}:
|
||||
|
||||
rustPlatform.buildRustPackage rec {
|
||||
pname = "jujutsu-openssh";
|
||||
version = "0.23.0+pr3191.openssh";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "dln";
|
||||
repo = "jj";
|
||||
rev = "aa61f294708502d4faf120720252b4aa76157f2d"; # https://github.com/dln/jj/tree/openssh
|
||||
hash = "sha256-5U873EtczuQBysXmfhLh0wrZ7rdkszOKHlakROBckWI=";
|
||||
};
|
||||
|
||||
cargoLock.lockFile = ./Cargo.lock;
|
||||
cargoLock.outputHashes = {
|
||||
"git2-0.19.0" = "sha256-fV8dFChGeDhb20bMyqefpAD5/+raQQ2sMdkEtlA1jaE=";
|
||||
};
|
||||
|
||||
cargoBuildFlags = [
|
||||
"--bin"
|
||||
"jj"
|
||||
]; # don't install the fake editors
|
||||
useNextest = false; # nextest is the upstream integration framework, but is problematic for test skipping
|
||||
ZSTD_SYS_USE_PKG_CONFIG = "1"; # disable vendored zlib
|
||||
|
||||
nativeBuildInputs = [
|
||||
gzip
|
||||
installShellFiles
|
||||
pkg-config
|
||||
];
|
||||
|
||||
buildInputs = [
|
||||
openssl
|
||||
zstd
|
||||
libgit2
|
||||
openssh
|
||||
];
|
||||
|
||||
postInstall = ''
|
||||
$out/bin/jj util mangen > ./jj.1
|
||||
installManPage ./jj.1
|
||||
|
||||
installShellCompletion --cmd jj \
|
||||
--bash <($out/bin/jj util completion bash) \
|
||||
--fish <($out/bin/jj util completion fish) \
|
||||
--zsh <($out/bin/jj util completion zsh)
|
||||
'';
|
||||
|
||||
checkFlags = [
|
||||
# signing tests spin up an ssh-agent and do git checkouts
|
||||
"--skip=test_ssh_signing"
|
||||
];
|
||||
|
||||
passthru = {
|
||||
updateScript = nix-update-script { };
|
||||
tests = {
|
||||
version = testers.testVersion {
|
||||
package = jujutsu-openssh;
|
||||
command = "jj --version";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
meta = with lib; {
|
||||
description = "Git-compatible DVCS that is both simple and powerful";
|
||||
homepage = "https://github.com/martinvonz/jj";
|
||||
changelog = "https://github.com/martinvonz/jj/blob/v${version}/CHANGELOG.md";
|
||||
license = licenses.asl20;
|
||||
maintainers = with maintainers; [
|
||||
_0x4A6F
|
||||
thoughtpolice
|
||||
];
|
||||
mainProgram = "jj";
|
||||
};
|
||||
}
|
30
pkgs/lazyjj/default.nix
Normal file
30
pkgs/lazyjj/default.nix
Normal file
|
@ -0,0 +1,30 @@
|
|||
{
|
||||
stdenvNoCC,
|
||||
fetchzip,
|
||||
}:
|
||||
let
|
||||
version = "0.3.1";
|
||||
in
|
||||
stdenvNoCC.mkDerivation {
|
||||
name = "lazyjj";
|
||||
inherit version;
|
||||
|
||||
src = fetchzip {
|
||||
url = "https://github.com/Cretezy/lazyjj/releases/download/v0.3.1/lazyjj-v0.3.1-x86_64-unknown-linux-musl.tar.gz";
|
||||
hash = "sha256-6R4W6uyq8sns8WLoJxp06xAYaJ0Zn+pZLtwhVIPobmc=";
|
||||
};
|
||||
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
mkdir -p $out/bin
|
||||
install -m755 -D $src/lazyjj $out/bin/lazyjj
|
||||
runHook postInstall
|
||||
'';
|
||||
|
||||
meta = {
|
||||
homepage = "https://github.com/Cretezy/lazyjj";
|
||||
description = "TUI for jj";
|
||||
mainProgram = "lazyjj";
|
||||
platforms = [ "x86_64-linux" ];
|
||||
};
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue