Compare commits

...

5 commits

Author SHA1 Message Date
62ecb566ed
fix vim
Some checks failed
/ lint (push) Failing after 34s
2026-03-17 12:59:14 +01:00
9583e816d6
add ssh and jj 2026-03-17 12:41:50 +01:00
e6522bdb86
gitignore and warnings 2026-03-17 10:57:12 +01:00
02bd57490f
tmux/fish 2026-03-17 10:45:52 +01:00
bdaefa4d5c
add TMUX_SESSION_NAME inheriting over ssh 2026-03-16 14:20:51 +01:00
15 changed files with 449 additions and 396 deletions

33
;
View file

@ -1,33 +0,0 @@
{
lib,
options,
machine,
...
}:
with lib;
{
options = {
custom.program = mkOption {
type = types.attrsOf (
types.submodule (
{ config, ... }:
{
options = {
name = mkOption {
type = types.string;
};
home-config = mkOption {
type = types.deferredModule;
};
system-config = mkOption {
type = types.deferredModule;
default = _: { };
};
};
config = if builtins.isNull machine.home-only then config.system-config else config.home-config;
}
)
);
};
};
}

View file

@ -1,9 +1,8 @@
{ { lib
lib, , pkgs
pkgs, , config
config, , secrets
secrets, , ...
...
}: }:
let let
factorioVersion = factorioVersion =
@ -61,12 +60,11 @@ let
}; };
privateUsers = "no"; privateUsers = "no";
imports = config =
{ { config
config, , pkgs
pkgs, , lib
lib, , ...
...
}: }:
{ {
systemd.services.factorio.serviceConfig.User = "factorio"; systemd.services.factorio.serviceConfig.User = "factorio";
@ -108,18 +106,19 @@ in
}; };
containers = containers =
factorioContainer "tawney" { factorioContainer "tawney"
autosave-interval = 20; {
admins = [ autosave-interval = 20;
"jonay2000" admins = [
"computerdruid" "jonay2000"
"pineapple" "computerdruid"
]; "pineapple"
extraSettingsFile = config.sops.secrets.factorio.path; ];
# mods = getMods .factorio-mods/tawney; extraSettingsFile = config.sops.secrets.factorio.path;
package = factorioVersion "2.0.69" "sha256-I1FHuz7WtfCmmTiTxskv3+U1upWrhmBG9R+GUoS1c0E="; # mods = getMods .factorio-mods/tawney;
port = 20001; package = factorioVersion "2.0.69" "sha256-I1FHuz7WtfCmmTiTxskv3+U1upWrhmBG9R+GUoS1c0E=";
} port = 20001;
}
// factorioContainer "snek" { // factorioContainer "snek" {
autosave-interval = 20; autosave-interval = 20;
admins = [ admins = [

View file

@ -1,7 +1,6 @@
{ { pkgs
pkgs, , config
config, , ...
...
}: }:
{ {
imports = [ imports = [
@ -63,25 +62,27 @@
nautilus nautilus
adwaita-icon-theme adwaita-icon-theme
(pkgs.callPackage ( (pkgs.callPackage
{ stdenv }: (
stdenv.mkDerivation { { stdenv }:
name = "global-cursor-theme"; stdenv.mkDerivation {
unpackPhase = "true"; name = "global-cursor-theme";
outputs = [ "out" ]; unpackPhase = "true";
installPhase = '' outputs = [ "out" ];
mkdir -p $out/share/icons/default installPhase = ''
cat << EOF > $out/share/icons/default/index.theme mkdir -p $out/share/icons/default
[Icon Theme] cat << EOF > $out/share/icons/default/index.theme
Name=Default [Icon Theme]
Comment=Default Cursor Theme Name=Default
Inherits=Adwaita Comment=Default Cursor Theme
EOF Inherits=Adwaita
''; EOF
} '';
) { }) }
)
{ })
config.boot.kernelPackages.perf perf
rr rr
]; ];

View file

@ -4,6 +4,7 @@
imports = lib.concatLists [ imports = lib.concatLists [
[ [
./xdg.nix ./xdg.nix
./ssh.nix
./nvim ./nvim
./fish ./fish
./kanata ./kanata
@ -43,11 +44,10 @@
inherit inputs; inherit inputs;
requirements = [ "graphical" ]; requirements = [ "graphical" ];
home-config = home-config =
{ { config
config, , pkgs
pkgs, , lib
lib, , ...
...
}: }:
let let
disableFeatures = [ disableFeatures = [

View file

@ -5,256 +5,260 @@ inputs@{ machine, ... }:
inherit inputs; inherit inputs;
requirements = [ "cli" ]; requirements = [ "cli" ];
home-config = home-config =
{ { config
config, , pkgs
pkgs, , lib
lib, , ...
...
}: }:
with builtins; with builtins;
with lib.attrsets; with lib.attrsets;
let let
scripts = (import ./scripts.nix) pkgs; scripts = (import ./scripts.nix) pkgs;
aliases = with scripts; { aliases = with scripts; {
"cp-mov" = cp-media "mov" "movies"; "cp-mov" = cp-media "mov" "movies";
"cp-ser" = cp-media "ser" "shows"; "cp-ser" = cp-media "ser" "shows";
"cp-ani" = cp-media "ani" "anime"; "cp-ani" = cp-media "ani" "anime";
"dumpasm" = "${pkgs.custom.dumpasm}/bin/dumpasm"; "ragdoll" = ragdoll;
"p" = builtins.trace calc calc; "dumpasm" = "${pkgs.custom.dumpasm}/bin/dumpasm";
"s" = "systemctl"; "p" = calc;
"j" = "journalctl"; "s" = "systemctl";
"ju" = "journalctl -u"; "j" = "journalctl";
"jfu" = "journalctl -fu"; "ju" = "journalctl -u";
"ls" = "${pkgs.eza}/bin/eza --git"; "jfu" = "journalctl -fu";
"ll" = "${pkgs.eza}/bin/eza --git"; "ls" = "${pkgs.eza}/bin/eza --git";
"lt" = "${pkgs.eza}/bin/eza --long --tree -L 3"; "ll" = "${pkgs.eza}/bin/eza --git";
"open" = "${pkgs.xdg-utils}/bin/xdg-open"; "lt" = "${pkgs.eza}/bin/eza --long --tree -L 3";
"cb" = "${pkgs.wl-clipboard-rs}/bin/wl-copy"; "open" = "${pkgs.xdg-utils}/bin/xdg-open";
"cat" = "${pkgs.bat}/bin/bat"; "cb" = "${pkgs.wl-clipboard-rs}/bin/wl-copy";
"cat" = "${pkgs.bat}/bin/bat";
# "pull" = "${pkgs.git}/bin/git pull"; # "pull" = "${pkgs.git}/bin/git pull";
# "push" = "${pkgs.git}/bin/git push"; # "push" = "${pkgs.git}/bin/git push";
# "commit" = "${pkgs.git}/bin/git commit"; # "commit" = "${pkgs.git}/bin/git commit";
# "add" = "${pkgs.git}/bin/git add"; # "add" = "${pkgs.git}/bin/git add";
# "patch" = "${pkgs.git}/bin/git add -p"; # "patch" = "${pkgs.git}/bin/git add -p";
# "amend" = "${pkgs.git}/bin/git commit --amend"; # "amend" = "${pkgs.git}/bin/git commit --amend";
# "log" = "${pkgs.git}/bin/git log --all --graph --decorate"; # "log" = "${pkgs.git}/bin/git log --all --graph --decorate";
# "st" = "${pkgs.git}/bin/git status"; # "st" = "${pkgs.git}/bin/git status";
# "checkout" = "${pkgs.git}/bin/git checkout"; # "checkout" = "${pkgs.git}/bin/git checkout";
# "rebase" = "${pkgs.git}/bin/git rebase"; # "rebase" = "${pkgs.git}/bin/git rebase";
# "stash" = "${pkgs.git}/bin/git stash"; # "stash" = "${pkgs.git}/bin/git stash";
"edit" = "jj edit"; "edit" = "jj edit";
"old" = "jj edit @-"; "old" = "jj edit @-";
"new" = "jj edit @+"; "new" = "jj edit @+";
"rebase" = "jj rebase"; "rebase" = "jj rebase";
"pull" = "jj git fetch; jj catchup"; "pull" = "jj git fetch; jj catchup";
"msg" = "jj describe -m"; "msg" = "jj describe -m";
"branch" = "jj bookmark set"; "branch" = "jj bookmark set";
"stat" = "jj status"; "stat" = "jj status";
"push" = "jj git push"; "push" = "jj git push";
"tidy" = "x test tidy --bless"; "tidy" = "x test tidy --bless";
"ui" = "x test tests/ui/"; "ui" = "x test tests/ui/";
"f" = "nautilus --no-desktop . &"; "f" = "nautilus --no-desktop . &";
}; };
# extracting any compressed format # extracting any compressed format
extract = '' extract = ''
function extract -a file -d "decompress a file" function extract -a file -d "decompress a file"
if not test -f $file if not test -f $file
echo "'$file' is not a valid file" echo "'$file' is not a valid file"
return 1
end
switch $file
# tar can automatically figure out how to decompress
case '*.{tar,tar.{bz2,zst,gz,xz},tbz2,tgz'; ${pkgs.gnutar}/bin/tar xf $file; end
case '*.bz2'; bunzip2 $file; end
case '*.rar'; unrar e $file; end
case '*.gz'; gunzip $file; end
case '*.zip'; ${pkgs.unzip}/bin/unzip $file; end
case '*.Z'; uncompress $file; end
case '*.7z'; 7z x $file; end
case '*';
echo "'$file' cannot be extracted"
return 1 return 1
end
switch $file
# tar can automatically figure out how to decompress
case '*.{tar,tar.{bz2,zst,gz,xz},tbz2,tgz'; ${pkgs.gnutar}/bin/tar xf $file; end
case '*.bz2'; bunzip2 $file; end
case '*.rar'; unrar e $file; end
case '*.gz'; gunzip $file; end
case '*.zip'; ${pkgs.unzip}/bin/unzip $file; end
case '*.Z'; uncompress $file; end
case '*.7z'; 7z x $file; end
case '*';
echo "'$file' cannot be extracted"
return 1
end
end end
end '';
''; in
in {
{ programs = {
programs = { atuin = {
atuin = { enable = true;
enable = true; enableFishIntegration = true;
enableFishIntegration = true;
settings = { settings = {
filter_mode_shell_up_key_binding = "workspace"; filter_mode_shell_up_key_binding = "workspace";
exit_mode = "return-original"; exit_mode = "return-original";
inline_height = 20; inline_height = 20;
workspaces = true; workspaces = true;
};
}; };
};
zoxide = { zoxide = {
enable = true; enable = true;
enableFishIntegration = true; enableFishIntegration = true;
}; };
direnv = { direnv = {
enable = true; enable = true;
# enableFishIntegration = lib.mkDefault true; # enableFishIntegration = lib.mkDefault true;
}; };
fzf = { fzf = {
enable = true; enable = true;
enableFishIntegration = true; enableFishIntegration = true;
}; };
fish = { fish = {
enable = true; enable = true;
shellAliases = aliases; shellAliases = aliases;
plugins = with pkgs.fishPlugins; [ plugins = with pkgs.fishPlugins; [
{ {
name = "bang-bang"; name = "bang-bang";
src = pkgs.fetchFromGitHub { src = pkgs.fetchFromGitHub {
owner = "oh-my-fish"; owner = "oh-my-fish";
repo = "plugin-bang-bang"; repo = "plugin-bang-bang";
rev = "ec991b80ba7d4dda7a962167b036efc5c2d79419"; rev = "ec991b80ba7d4dda7a962167b036efc5c2d79419";
hash = "sha256-oPPCtFN2DPuM//c48SXb4TrFRjJtccg0YPXcAo0Lxq0="; hash = "sha256-oPPCtFN2DPuM//c48SXb4TrFRjJtccg0YPXcAo0Lxq0=";
};
}
{
name = "tide";
inherit (tide) src;
}
{
name = "sponge";
inherit (sponge) src;
}
{
name = "autopair";
inherit (autopair) src;
}
];
functions = {
fish_jj_prompt = {
body = ''
if not ${config.programs.jujutsu.package}/bin/jj root --quiet &>/dev/null
return 1
end
${config.programs.jujutsu.package}/bin/jj log --ignore-working-copy --no-graph --color always -r @ -T '
separate(
" ",
bookmarks.join(", "),
change_id.shortest(),
commit_id.shortest(),
if(conflict, "conflict"),
if(empty, "empty"),
if(divergent, "divergent"),
if(hidden, "hidden"),
)
'
'';
}; };
}
{
name = "tide";
inherit (tide) src;
}
{
name = "sponge";
inherit (sponge) src;
}
{
name = "autopair";
inherit (autopair) src;
}
];
functions = { _tide_item_jj = {
fish_jj_prompt = { body = ''
body = '' set -l _tide_item_jj_color $_tide_location_color
if not ${config.programs.jujutsu.package}/bin/jj root --quiet &>/dev/null echo -ns $_tide_item_jj_color" ("(fish_jj_prompt)$_tide_item_jj_color")"
return 1 '';
end };
${config.programs.jujutsu.package}/bin/jj log --ignore-working-copy --no-graph --color always -r @ -T ' _tide_item_git = {
separate( body = ''
" ", if not test -d .jj
bookmarks.join(", "), fish_git_prompt '%s'
change_id.shortest(), end
commit_id.shortest(), '';
if(conflict, "conflict"), };
if(empty, "empty"),
if(divergent, "divergent"),
if(hidden, "hidden"),
)
'
'';
}; };
_tide_item_jj = { interactiveShellInit = ''
body = '' fish_vi_key_bindings
set -l _tide_item_jj_color $_tide_location_color
echo -ns $_tide_item_jj_color" ("(fish_jj_prompt)$_tide_item_jj_color")"
'';
};
_tide_item_git = { bind \e\[3\;5~ kill-word
body = '' bind \cH backward-kill-word
if not test -d .jj bind \cV beginning-of-line
fish_git_prompt '%s' bind \f end-of-line
end
''; bind -M insert \e\[3\;5~ kill-word
}; bind -M insert \cH backward-kill-word
bind -M insert \cV beginning-of-line
bind -M insert \f end-of-line
bind \cl 'clear; commandline -f repaint'
bind -M insert \cl 'clear; commandline -f repaint'
set -g sponge_successful_exit_codes 0
set -g sponge_allow_previously_successful false
set -g sponge_delay 10
${config.programs.jujutsu.package}/bin/jj util completion fish | source
# if set -q tide_left_prompt_items; and not contains "jj" $tide_left_prompt_items
# set -l tide_item_jj_idx (contains -i "pwd" $tide_left_prompt_items)
# if test $tide_item_jj_idx
# set tide_left_prompt_items \
# $tide_left_prompt_items[1..$tide_item_jj_idx] \
# jj \
# $tide_left_prompt_items[(math $tide_item_jj_idx + 1)..-1]
# end
# end
function t
cd "$(${pkgs.custom.t}/bin/t-rs $argv | tail -n 1)"
end
function temp
t $argv
end
function rs
cd "$(${pkgs.custom.t}/bin/t-rs $argv | tail -n 1)"
cargo init . --bin --name $(basename "$PWD")
vim src/main.rs
end
fish_add_path "$HOME/.cargo/bin"
fish_add_path "$HOME/.local/bin"
fish_add_path "$HOME/Documents/scripts"
fish_add_path "$HOME/.nix-profile/bin"
function fish_greeting
${pkgs.blahaj}/bin/blahaj -s
echo "mrow! This is $(uname -n) and ur $(whoami) :3"
end
'';
}; };
};
interactiveShellInit = '' home.activation = {
fish_vi_key_bindings setupTide = lib.hm.dag.entryAfter [ "writeBoundary" ] ''
setupTide() {
bind \e\[3\;5~ kill-word ${pkgs.fish}/bin/fish -c ${lib.escapeShellArg "tide configure ${
bind \cH backward-kill-word lib.cli.toCommandLineShell (optionName: {
bind \cV beginning-of-line option = if builtins.stringLength optionName > 1 then "--${optionName}" else "-${optionName}";
bind \f end-of-line sep = null;
explicitBool = false;
bind -M insert \e\[3\;5~ kill-word }) {
bind -M insert \cH backward-kill-word auto = true;
bind -M insert \cV beginning-of-line style = "Lean";
bind -M insert \f end-of-line prompt_colors = "True color";
show_time = "No";
bind \cl 'clear; commandline -f repaint' lean_prompt_height = "Two lines";
bind -M insert \cl 'clear; commandline -f repaint' prompt_connection = "Disconnected";
prompt_spacing = "Compact";
set -g sponge_successful_exit_codes 0 icons = "Few icons";
set -g sponge_allow_previously_successful false transient = "Yes";
set -g sponge_delay 10 }
}"} >/dev/null 2>&1
${config.programs.jujutsu.package}/bin/jj util completion fish | source }
setupTide
# if set -q tide_left_prompt_items; and not contains "jj" $tide_left_prompt_items
# set -l tide_item_jj_idx (contains -i "pwd" $tide_left_prompt_items)
# if test $tide_item_jj_idx
# set tide_left_prompt_items \
# $tide_left_prompt_items[1..$tide_item_jj_idx] \
# jj \
# $tide_left_prompt_items[(math $tide_item_jj_idx + 1)..-1]
# end
# end
function t
cd "$(${pkgs.custom.t}/bin/t-rs $argv | tail -n 1)"
end
function temp
t $argv
end
function rs
cd "$(${pkgs.custom.t}/bin/t-rs $argv | tail -n 1)"
cargo init . --bin --name $(basename "$PWD")
vim src/main.rs
end
fish_add_path "$HOME/.cargo/bin"
fish_add_path "$HOME/.local/bin"
fish_add_path "$HOME/Documents/scripts"
fish_add_path "$HOME/.nix-profile/bin"
function fish_greeting
${pkgs.blahaj}/bin/blahaj -s
echo "mrow! This is $(uname -n) and ur $(whoami) :3"
end
''; '';
}; };
}; };
home.activation = {
setupTide = lib.hm.dag.entryAfter [ "writeBoundary" ] ''
setupTide() {
${pkgs.fish}/bin/fish -c ${lib.escapeShellArg "tide configure ${
lib.cli.toGNUCommandLineShell { } {
auto = true;
style = "Lean";
prompt_colors = "True color";
show_time = "No";
lean_prompt_height = "Two lines";
prompt_connection = "Disconnected";
prompt_spacing = "Compact";
icons = "Few icons";
transient = "Yes";
}
}"} >/dev/null 2>&1
}
setupTide
'';
};
};
}; };
} }

View file

@ -22,4 +22,16 @@
''; '';
in in
"${s}/bin/cp-${name}"; "${s}/bin/cp-${name}";
ragdoll = "${pkgs.writeScriptBin "ragdoll" ''
RAND=$(xxd -l 32 -c 32 -p < /dev/urandom)
if [ -z "$TMUX_SESSION_NAME" ]; then
RAND=$(cat /dev/urandom | head -c 20 | base32)
export TMUX_SESSION_NAME="$RAND"
tmux rename-session -t "$(tmux display-message -p "#S")" "$TMUX_SESSION_NAME"
fi
SSH_TMUX_SESSION_NAME="ssh-from-$(hostname)-$TMUX_SESSION_NAME"
tmux detach -E "kitten ssh -t ragdoll \"export TMUX_SESSION_NAME=$SSH_TMUX_SESSION_NAME; tmux attach -t $SSH_TMUX_SESSION_NAME || tmux new -e TMUX_SESSION_NAME=$SSH_TMUX_SESSION_NAME -s $SSH_TMUX_SESSION_NAME\"; exec tmux attach -t $TMUX_SESSION_NAME"
''}/bin/ragdoll";
} }

View file

@ -5,6 +5,10 @@ inputs@{ machine, ... }:
inherit inputs; inherit inputs;
requirements = [ "cli" ]; requirements = [ "cli" ];
home-config = _: { home-config = _: {
home.file.".gitignore".text = ''
server\ exited\ unexpectedly
'';
programs.git = { programs.git = {
enable = true; enable = true;
signing.key = "/home/jana/.ssh/id_ed25519.pub"; signing.key = "/home/jana/.ssh/id_ed25519.pub";

View file

@ -100,8 +100,6 @@ inputs@{ machine, ... }:
"-c" "-c"
script script
]; ];
in
{
tug = [ tug = [
"bookmark" "bookmark"
"move" "move"
@ -110,6 +108,9 @@ inputs@{ machine, ... }:
"--to" "--to"
"coalesce(@ & ~empty(), @-)" "coalesce(@ & ~empty(), @-)"
]; ];
in
{
inherit tug;
fuck = [ fuck = [
"bookmark" "bookmark"
"move" "move"
@ -153,6 +154,18 @@ inputs@{ machine, ... }:
"--from" "--from"
"trunk()" "trunk()"
]; ];
n = [ "edit" "@+" ];
p = [ "edit" "@-" ];
gp = [ "git" "push" ];
t = tug;
d = "describe";
dm = [ "describe" "-m" ];
e = "edit";
s = "squash";
si = "squash -i";
sp = "split";
}; };
templates = { templates = {

View file

@ -34,7 +34,11 @@ inputs@{ machine, ... }:
draw_minimal_borders = false; draw_minimal_borders = false;
hide_window_decorations = true; hide_window_decorations = true;
shell = "${pkgs.tmux}/bin/tmux"; shell = "${pkgs.writeScriptBin "tmux-sesh" ''
RAND=$(cat /dev/urandom | head -c 20 | base32)
export TMUX_SESSION_NAME="kitty-$RAND"
exec ${pkgs.tmux}/bin/tmux new -e TMUX_SESSION_NAME=$TMUX_SESSION_NAME -s "$TMUX_SESSION_NAME"
''}/bin/tmux-sesh";
clipboard_control = "write-clipboard write-primary read-clipboard read-primary"; clipboard_control = "write-clipboard write-primary read-clipboard read-primary";
foreground = "#fcfcfc"; foreground = "#fcfcfc";

View file

@ -21,7 +21,7 @@ inputs@{ machine, ... }:
] ]
++ (pkgs.lib.splitString " " cmd); ++ (pkgs.lib.splitString " " cmd);
wallpaper = ("${pkgs.custom.raw-data}/pacific.png"); wallpaper = "${pkgs.custom.raw-data}/pacific.png";
matugenSchemeType = "scheme-tonal-spot"; matugenSchemeType = "scheme-tonal-spot";
in in
{ {

View file

@ -107,9 +107,12 @@ vim.cmd([[
-- multicursor -- multicursor
vim.g.VM_default_mappings = 1 vim.g.VM_default_mappings = 1
vim.g.VM_mouse_mappings = 1
vim.g.VM_reselect_first = 1 vim.g.VM_reselect_first = 1
vim.g.VM_notify_previously_selected = 1 vim.g.VM_notify_previously_selected = 1
vim.g.VM_theme = "iceblue" vim.g.VM_theme = "iceblue"
-- vim.g.VM_maps["Undo"] = 'u'
-- vim.g.VM_maps["Redo"] = '<C-r>'

View file

@ -5,11 +5,10 @@ inputs@{ machine, ... }:
inherit inputs; inherit inputs;
requirements = [ "cli" ]; requirements = [ "cli" ];
home-config = home-config =
{ { pkgs
pkgs, , flakes
flakes, , lib
lib, , ...
...
}: }:
let let
nvim_mime_types = [ nvim_mime_types = [
@ -58,9 +57,11 @@ inputs@{ machine, ... }:
}; };
xdg.mimeApps.associations.added = lib.mergeAttrsList ( xdg.mimeApps.associations.added = lib.mergeAttrsList (
map (mime: { map
${mime} = [ "${desktop-entry-name}.desktop" ]; (mime: {
}) nvim_mime_types ${mime} = [ "${desktop-entry-name}.desktop" ];
})
nvim_mime_types
); );
imports = [ imports = [

View file

@ -384,7 +384,7 @@ in
code_action.keys = { code_action.keys = {
quit = "<Esc>"; quit = "<Esc>";
}; };
symbol_in_winbar.enable = false; symbol_in_winbar.enable = true;
implement.enable = true; implement.enable = true;
}; };
}; };
@ -435,8 +435,8 @@ in
__unkeyed-1 = "filetype"; __unkeyed-1 = "filetype";
} }
]; ];
lualine_y = [ { __unkeyed-1 = "progress"; } ]; lualine_y = [{ __unkeyed-1 = "progress"; }];
lualine_z = [ { __unkeyed-1 = "location"; } ]; lualine_z = [{ __unkeyed-1 = "location"; }];
}; };
}; };
}; };

42
programs/ssh.nix Normal file
View file

@ -0,0 +1,42 @@
inputs@{ machine, ... }: {
imports =
machine.program {
name = "ssh";
inherit inputs;
requirements = [ "cli" ];
home-config = _: {
programs.ssh = {
enable = true;
enableDefaultConfig = false;
matchBlocks = {
fili = {
user = "jana";
hostname = "donsz.nl";
};
icecube = {
hostname = "192.168.178.138";
proxyJump = "fili";
};
ragdoll = {
hostname = "192.168.178.138";
proxyJump = "fili";
};
"*" = {
forwardAgent = false;
serverAliveInterval = 0;
serverAliveCountMax = 3;
compression = false;
addKeysToAgent = null;
hashKnownHosts = false;
userKnownHostsFile = "~/.ssh/known_hosts";
controlMaster = "no";
controlPath = "~/.ssh/master-%r@%n:%p";
controlPersist = null;
};
};
};
};
}
;
}

View file

@ -14,32 +14,33 @@ inputs@{ machine, ... }:
shortcut = "k"; shortcut = "k";
plugins = with pkgs; [ plugins =
{ with pkgs;
plugin = tmuxPlugins.mkTmuxPlugin { with tmuxPlugins;
pluginName = "suspend"; [
version = "1a2f806"; {
src = pkgs.fetchFromGitHub { plugin = mkTmuxPlugin {
owner = "MunifTanjim"; pluginName = "suspend";
repo = "tmux-suspend"; version = "1a2f806";
rev = "1a2f806666e0bfed37535372279fa00d27d50d14"; src = pkgs.fetchFromGitHub {
sha256 = "0j7vjrwc7gniwkv1076q3wc8ccwj42zph5wdmsm9ibz6029wlmzv"; owner = "MunifTanjim";
repo = "tmux-suspend";
rev = "1a2f806666e0bfed37535372279fa00d27d50d14";
sha256 = "0j7vjrwc7gniwkv1076q3wc8ccwj42zph5wdmsm9ibz6029wlmzv";
};
}; };
}; extraConfig = ''
extraConfig = '' set -g @suspend_key 'F11'
set -g @suspend_key 'F11' '';
''; }
} {
{ plugin = mode-indicator;
plugin = tmuxPlugins.mode-indicator; }
} ];
];
extraConfig = '' extraConfig = ''
# unbind every single normal keybinding # unbind every single normal keybinding
unbind-key -a unbind -a
set -g status-left "#{?client_prefix,#[bg=colour2],#[bg=colour1]}#[fg=colour0] #S "
# for special characters to work right # for special characters to work right
# like <C-_> # like <C-_>
@ -60,39 +61,40 @@ inputs@{ machine, ... }:
bind -T copy-mode-vi y send-keys -X copy-pipe-and-cancel bind -T copy-mode-vi y send-keys -X copy-pipe-and-cancel
bind v copy-mode bind v copy-mode
bind p paste-buffer -p bind p paste-buffer -p
bind d detach
set -s set-clipboard on set -s set-clipboard on
# get back normal terminal emulator bindings # get back normal terminal emulator bindings
bind-key -n S-PPage copy-mode -u bind -n S-PPage copy-mode -u
bind-key -T copy-mode -n S-NPage send-keys -X page-down bind -T copy-mode -n S-NPage send-keys -X page-down
# don't scroll to end when copying with mouse # don't scroll to end when copying with mouse
bind-key -T copy-mode MouseDragEnd1Pane send-keys -X copy-pipe bind -T copy-mode MouseDragEnd1Pane send-keys -X copy-pipe
bind-key -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe bind -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe
bind-key -T copy-mode DoubleClick1Pane select-pane \; send-keys -X select-word \; run-shell -d 0.3 \; send-keys -X copy-pipe bind -T copy-mode DoubleClick1Pane select-pane \; send-keys -X select-word \; run-shell -d 0.3 \; send-keys -X copy-pipe
bind-key -T copy-mode TripleClick1Pane select-pane \; send-keys -X select-line \; run-shell -d 0.3 \; send-keys -X copy-pipe bind -T copy-mode TripleClick1Pane select-pane \; send-keys -X select-line \; run-shell -d 0.3 \; send-keys -X copy-pipe
bind-key -T copy-mode-vi DoubleClick1Pane select-pane \; send-keys -X select-word \; run-shell -d 0.3 \; send-keys -X copy-pipe bind -T copy-mode-vi DoubleClick1Pane select-pane \; send-keys -X select-word \; run-shell -d 0.3 \; send-keys -X copy-pipe
bind-key -T copy-mode-vi TripleClick1Pane select-pane \; send-keys -X select-line \; run-shell -d 0.3 \; send-keys -X copy-pipe bind -T copy-mode-vi TripleClick1Pane select-pane \; send-keys -X select-line \; run-shell -d 0.3 \; send-keys -X copy-pipe
# window control # window control
bind t new-window -c "#{pane_current_path}" bind t new-window -c "#{pane_current_path}"
bind-key Tab next-window bind Tab next-window
bind-key BTab previous-window bind BTab previous-window
set -g automatic-rename-format "#{?#{==:#{pane_current_path},$HOME},~,#{b:pane_current_path}} (#{pane_current_command})" set -g automatic-rename-format "#{?#{==:#{pane_current_path},$HOME},~,#{b:pane_current_path}} (#{pane_current_command})"
set -g renumber-windows on set -g renumber-windows on
bind-key Q confirm-before -p "kill-window #W? (y/n)" kill-window bind Q confirm-before -p "kill-window #W? (y/n)" kill-window
bind A last-window bind A last-window
bind-key 1 select-window -t :0 bind 1 select-window -t :0
bind-key 2 select-window -t :1 bind 2 select-window -t :1
bind-key 3 select-window -t :2 bind 3 select-window -t :2
bind-key 4 select-window -t :3 bind 4 select-window -t :3
bind-key 5 select-window -t :4 bind 5 select-window -t :4
bind-key 6 select-window -t :5 bind 6 select-window -t :5
bind-key 7 select-window -t :6 bind 7 select-window -t :6
bind-key 8 select-window -t :7 bind 8 select-window -t :7
bind-key 9 select-window -t :8 bind 9 select-window -t :8
bind-key 0 select-window -t :9 bind 0 select-window -t :9
# pane control # pane control
bind h select-pane -L bind h select-pane -L
@ -111,40 +113,44 @@ inputs@{ machine, ... }:
bind S-Down split-window -v -c "#{pane_current_path}" bind S-Down split-window -v -c "#{pane_current_path}"
bind S-Up split-window -h -b -c "#{pane_current_path}" bind S-Up split-window -h -b -c "#{pane_current_path}"
bind S-Right split-window -v -b -c "#{pane_current_path}" bind S-Right split-window -v -b -c "#{pane_current_path}"
bind-key -r -T prefix M-h resize-pane -L 5 bind -r -T prefix M-h resize-pane -L 5
bind-key -r -T prefix M-j resize-pane -D 5 bind -r -T prefix M-j resize-pane -D 5
bind-key -r -T prefix M-k resize-pane -U 5 bind -r -T prefix M-k resize-pane -U 5
bind-key -r -T prefix M-l resize-pane -R 5 bind -r -T prefix M-l resize-pane -R 5
bind x swap-pane -D bind x swap-pane -D
bind z resize-pane -Z
# swap a full screen and terminal
bind a if -F "#{?window_zoomed_flag,0,1}" "select-pane -l ; resize-pane -Z" "resize-pane -Z ; select-pane -l"
# double-click ^k (or lshift with kanata) for previous pane like ^w in vim # double-click ^k (or lshift with kanata) for previous pane like ^w in vim
bind -r ^k select-pane -l bind -r ^k select-pane -l
bind-key q confirm-before -p "kill-pane #P? (y/n)" kill-pane bind q confirm-before -p "kill-pane #P? (y/n)" kill-pane
# bind-key o choose-tree -wZ # bind o choose-tree -wZ
# bind-key O choose-tree -sZ # bind O choose-tree -sZ
# get back command mode and some other basics... # get back command mode and some other basics...
bind : command-prompt bind : command-prompt
bind r source-file ~/.config/tmux/tmux.conf \; display "config reloaded" bind r source-file ~/.config/tmux/tmux.conf \; display "config reloaded"
bind-key ? list-keys bind ? list-keys
# Scroll oin man etc # Scroll in man etc
tmux_commands_with_legacy_scroll="nano less more man git" tmux_commands_with_legacy_scroll="nano less more man git"
bind-key -T root WheelUpPane \ bind -T root WheelUpPane \
if-shell -Ft= '#{?mouse_any_flag,1,#{pane_in_mode}}' \ if-shell -Ft= '#{?mouse_any_flag,1,#{pane_in_mode}}' \
'send -Mt=' \ 'send -Mt=' \
'if-shell -t= "#{?alternate_on,true,false} || echo \"#{tmux_commands_with_legacy_scroll}\" | grep -q \"#{pane_current_command}\"" \ 'if-shell -t= "#{?alternate_on,true,false} || echo \"#{tmux_commands_with_legacy_scroll}\" | grep -q \"#{pane_current_command}\"" \
"send -t= Up" "copy-mode -et="' "send -t= Up" "copy-mode -et="'
bind-key -T root WheelDownPane \ bind -T root WheelDownPane \
if-shell -Ft = '#{?pane_in_mode,1,#{mouse_any_flag}}' \ if-shell -Ft = '#{?pane_in_mode,1,#{mouse_any_flag}}' \
'send -Mt=' \ 'send -Mt=' \
'if-shell -t= "#{?alternate_on,true,false} || echo \"#{tmux_commands_with_legacy_scroll}\" | grep -q \"#{pane_current_command}\"" \ 'if-shell -t= "#{?alternate_on,true,false} || echo \"#{tmux_commands_with_legacy_scroll}\" | grep -q \"#{pane_current_command}\"" \
"send -t= Down" "send -Mt="' "send -t= Down" "send -Mt="'
bind-key -T copy-mode-vi ] \ bind -T copy-mode-vi ] \
send-keys -X clear-selection \; \ send-keys -X clear-selection \; \
send-keys -X search-forward "--> " \; \ send-keys -X search-forward "--> " \; \
send-keys -X next-word \; \ send-keys -X next-word \; \
@ -152,7 +158,7 @@ inputs@{ machine, ... }:
send-keys -X jump-forward ":" \; \ send-keys -X jump-forward ":" \; \
send-keys -X jump-to-forward ":" \; send-keys -X jump-to-forward ":" \;
bind-key -T copy-mode-vi [ \ bind -T copy-mode-vi [ \
send-keys -X clear-selection \; \ send-keys -X clear-selection \; \
send-keys -X start-of-line \; \ send-keys -X start-of-line \; \
send-keys -X search-backward "--> " \; \ send-keys -X search-backward "--> " \; \
@ -161,10 +167,8 @@ inputs@{ machine, ... }:
send-keys -X jump-forward ":" \; \ send-keys -X jump-forward ":" \; \
send-keys -X jump-to-forward ":" \; send-keys -X jump-to-forward ":" \;
bind-key [ copy-mode \; send-keys [ bind [ copy-mode \; send-keys [
bind-key ] copy-mode \; send-keys ] bind ] copy-mode \; send-keys ]
bind d select-pane -l \; send-keys [
# f: file search # f: file search
# unbound: git files # unbound: git files
@ -174,32 +178,31 @@ inputs@{ machine, ... }:
# M-i: ips # M-i: ips
# include line and column numbers in file search # include line and column numbers in file search
# rebind `f` so we can reuse it here # rebind `f` so we can reuse it here
bind-key -T prefix C-f command-prompt { find-window -Z "%%" } bind -T prefix C-f command-prompt { find-window -Z "%%" }
# jyn is so sorry, and so am I now # jyn is so sorry, and so am I now
# https://github.com/jyn514/dotfiles/blob/65be3c004113290f41f858f4d7f1a6799fabab19/config/tmux.conf#L203-L212 # https://github.com/jyn514/dotfiles/blob/65be3c004113290f41f858f4d7f1a6799fabab19/config/tmux.conf#L203-L212
# see `search-regex.sh` for wtf this means # see `search-regex.sh` for wtf this means
# TODO: include shell variable names # TODO: include shell variable names
bind-key f copy-mode \; send-keys -X search-backward '(^|/|\<|[[:space:]"])((\.|\.\.)|[[:alnum:]~_"-]*)((/[][[:alnum:]_.#$%&+=@"-]+)+([/ "]|\.([][[:alnum:]_.#$%&+=@"-]+(:[0-9]+)?(:[0-9]+)?)|[][[:alnum:]_.#$%&+=@"-]+(:[0-9]+)(:[0-9]+)?)|(/[][[:alnum:]_.#$%&+=@"-]+){2,}([/ "]|\.([][[:alnum:]_.#$%&+=@"-]+(:[0-9]+)?(:[0-9]+)?)|[][[:alnum:]_.#$%&+=@"-]+(:[0-9]+)(:[0-9]+)?)?|(\.|\.\.)/([][[:alnum:]_.#$%&+=@"-]+(:[0-9]+)?(:[0-9]+)?))' bind f copy-mode \; send-keys -X search-backward '(^|/|\<|[[:space:]"])((\.|\.\.)|[[:alnum:]~_"-]*)((/[][[:alnum:]_.#$%&+=@"-]+)+([/ "]|\.([][[:alnum:]_.#$%&+=@"-]+(:[0-9]+)?(:[0-9]+)?)|[][[:alnum:]_.#$%&+=@"-]+(:[0-9]+)(:[0-9]+)?)|(/[][[:alnum:]_.#$%&+=@"-]+){2,}([/ "]|\.([][[:alnum:]_.#$%&+=@"-]+(:[0-9]+)?(:[0-9]+)?)|[][[:alnum:]_.#$%&+=@"-]+(:[0-9]+)(:[0-9]+)?)?|(\.|\.\.)/([][[:alnum:]_.#$%&+=@"-]+(:[0-9]+)?(:[0-9]+)?))'
# urls # urls
bind-key u copy-mode \; send-keys -X search-backward '(https?://|git@|git://|ssh://|ftp://|file:///)[[:alnum:]?=%/_.:,;~@!#$&*+-]*' bind u copy-mode \; send-keys -X search-backward '(https?://|git@|git://|ssh://|ftp://|file:///)[[:alnum:]?=%/_.:,;~@!#$&*+-]*'
# hashes # hashes
bind-key g copy-mode \; send-keys -X search-backward '[[:<:]]([0-9a-f]{7,40}|[[:alnum:]]{52}|[0-9a-f]{64})[[:>:]]' bind g copy-mode \; send-keys -X search-backward '[[:<:]]([0-9a-f]{7,40}|[[:alnum:]]{52}|[0-9a-f]{64})[[:>:]]'
# ips # ips
bind-key M-i copy-mode \; send-keys -X search-backward '[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}' bind M-i copy-mode \; send-keys -X search-backward '[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}'
bind-key -T copy-mode-vi o send-keys -X copy-pipe \ bind -T copy-mode-vi o send-keys -X copy-pipe \
'cd #{pane_current_path}; xargs -I {} echo "echo {}" | bash | xargs ${../nvim/editor-hax.py} xdg-open-proxy' \; \ 'cd #{pane_current_path}; xargs -I {} echo "echo {}" | bash | xargs ${../nvim/editor-hax.py} xdg-open-proxy' \; \
if -F "#{alternate_on}" { send-keys -X cancel } if -F "#{alternate_on}" { send-keys -X cancel }
# save the buffer, then open an editor in the current pane # save the buffer, then open an editor in the current pane
bind-key -T copy-mode-vi O send-keys -X copy-pipe-and-cancel \ bind -T copy-mode-vi O send-keys -X copy-pipe-and-cancel \
'tmux send-keys "C-q"; xargs -I {} tmux send-keys "vim {}"; tmux send-keys "C-m"' 'tmux send-keys "C-q"; xargs -I {} tmux send-keys "vim {}"; tmux send-keys "C-m"'
# search for the highlighted text # search for the highlighted text
bind-key -T copy-mode-vi s send-keys -X copy-pipe \ bind -T copy-mode-vi s send-keys -X copy-pipe \
"cd #{pane_current_path}; xargs -I {} open 'https://www.google.com/search?q={}'" \; \ "cd #{pane_current_path}; xargs -I {} open 'https://www.google.com/search?q={}'" \; \
if -F "#{alternate_on}" { send-keys -X cancel } if -F "#{alternate_on}" { send-keys -X cancel }
# save buffer and retype into the shell # save buffer and retype into the shell
bind-key -T copy-mode-vi Tab send-keys -X copy-selection-and-cancel \; paste-buffer -p bind -T copy-mode-vi Tab send-keys -X copy-selection-and-cancel \; paste-buffer -p
''; '';
}; };
}; };