230 lines
5.9 KiB
Nix
230 lines
5.9 KiB
Nix
{
|
|
config,
|
|
pkgs,
|
|
lib,
|
|
...
|
|
}:
|
|
|
|
let
|
|
mainFont = "Berkeley Mono Nerd Font Mono";
|
|
fontSize = 14;
|
|
|
|
# Cage has no IPC for querying its active XKB group. This deck-only build
|
|
# writes that group to CAGE_XKB_STATE_FILE for the tmux indicator below.
|
|
cageWithLayoutState = pkgs.cage.overrideAttrs (oldAttrs: {
|
|
patches = (oldAttrs.patches or [ ]) ++ [ ./cage-xkb-state.patch ];
|
|
});
|
|
|
|
keyboardLayout = pkgs.writeShellApplication {
|
|
name = "keyboard-layout";
|
|
runtimeInputs = [ pkgs.coreutils ];
|
|
text = ''
|
|
runtime_dir="''${XDG_RUNTIME_DIR:-/run/user/$(id -u)}"
|
|
state_file="''${CAGE_XKB_STATE_FILE:-$runtime_dir/writter-deck-keyboard-layout}"
|
|
layout=0
|
|
|
|
if [[ -r "$state_file" ]]; then
|
|
IFS= read -r layout < "$state_file" || true
|
|
fi
|
|
|
|
case "$layout" in
|
|
0) printf 'US' ;;
|
|
1) printf 'PT' ;;
|
|
*) printf '?' ;;
|
|
esac
|
|
'';
|
|
};
|
|
in
|
|
{
|
|
imports = [
|
|
../../modules/home-manager/oh-my-posh
|
|
../../modules/home-manager/zshrc
|
|
../../modules/home-manager/bat
|
|
../../modules/home-manager/cedilla
|
|
../../modules/home-manager/opencode
|
|
../../modules/home-manager/nvim
|
|
../../modules/home-manager/pi
|
|
../../modules/home-manager/tmux
|
|
../../modules/home-manager/eza
|
|
../../modules/home-manager/zoxide
|
|
];
|
|
|
|
home = {
|
|
username = "jpporta";
|
|
homeDirectory = "/home/jpporta";
|
|
stateVersion = "26.11";
|
|
sessionVariables = {
|
|
EDITOR = "nvim";
|
|
};
|
|
};
|
|
|
|
nixpkgs.config.allowUnfree = true;
|
|
|
|
custom = {
|
|
zsh = {
|
|
enable = true;
|
|
fastfetch = false;
|
|
};
|
|
tmux = {
|
|
enable = true;
|
|
extraConfig = ''
|
|
# Cage does not expose the XKB group through Wayland. The deck-only
|
|
# Cage patch updates the state file consumed by this status segment.
|
|
set -g status-interval 1
|
|
set -ag status-right "#[fg=#89b4fa] KBD:#(${keyboardLayout}/bin/keyboard-layout)"
|
|
'';
|
|
};
|
|
cedilla = {
|
|
enable = true;
|
|
# Foot/libxkbcommon handles ~/.XCompose directly; the deck has no NixOS
|
|
# fcitx5 service at /run/current-system/sw.
|
|
startFcitx5 = false;
|
|
};
|
|
oh-my-posh.enable = true;
|
|
pi.enable = true;
|
|
nvim.enable = true;
|
|
eza.enable = true;
|
|
bat.enable = true;
|
|
zoxide.enable = true;
|
|
};
|
|
|
|
home.packages = with pkgs; [
|
|
cageWithLayoutState
|
|
keyboardLayout
|
|
foot
|
|
wlr-randr
|
|
git
|
|
ripgrep
|
|
fd
|
|
mosh
|
|
tailscale
|
|
fastfetch
|
|
stow
|
|
tmux
|
|
];
|
|
|
|
# Non-NixOS host: fixes locales, ld paths, XDG desktop entries
|
|
targets.genericLinux.enable = true;
|
|
|
|
# ---- fonts ----
|
|
fonts.fontconfig.enable = true;
|
|
|
|
home.file."my-fonts" = {
|
|
source = ./fonts;
|
|
target = ".local/share/fonts/custom";
|
|
recursive = true;
|
|
};
|
|
|
|
programs = {
|
|
home-manager.enable = true;
|
|
foot = {
|
|
enable = true;
|
|
server.enable = false;
|
|
settings = {
|
|
main = {
|
|
shell = "${pkgs.zsh}/bin/zsh --login";
|
|
term = "xterm-256color";
|
|
font = "${mainFont}:size=${toString fontSize}";
|
|
font-bold = "${mainFont}:size=${toString fontSize}";
|
|
pad = "12x12";
|
|
};
|
|
mouse = {
|
|
hide-when-typing = "yes";
|
|
};
|
|
scrollback.lines = 10000;
|
|
cursor.style = "block";
|
|
colors-dark = {
|
|
alpha = 1.0;
|
|
background = "282828";
|
|
foreground = "ebdbb2";
|
|
regular0 = "282828";
|
|
regular1 = "cc241d";
|
|
regular2 = "98971a";
|
|
regular3 = "d79921";
|
|
regular4 = "458588";
|
|
regular5 = "b16286";
|
|
regular6 = "689d6a";
|
|
regular7 = "a89984";
|
|
bright0 = "928374";
|
|
bright1 = "fb4934";
|
|
bright2 = "b8bb26";
|
|
bright3 = "fabd2f";
|
|
bright4 = "83a598";
|
|
bright5 = "d3869b";
|
|
bright6 = "8ec07c";
|
|
bright7 = "ebdbb2";
|
|
};
|
|
key-bindings = {
|
|
font-increase = "Control+plus Control+equal";
|
|
font-decrease = "Control+minus";
|
|
font-reset = "Control+0";
|
|
};
|
|
};
|
|
};
|
|
|
|
bash = {
|
|
enable = true;
|
|
profileExtra = ''
|
|
# Auto-launch cage + foot when logging in on tty1 (skip over SSH).
|
|
# If cage exits, you drop back to the login shell on tty1 instead
|
|
# of being stuck in a restart loop.
|
|
if [ "$(tty 2>/dev/null)" = "/dev/tty1" ] \
|
|
&& [ -z "$WAYLAND_DISPLAY" ] \
|
|
&& [ -z "$CAGE_RUNNING" ]; then
|
|
export CAGE_RUNNING=1
|
|
export WLR_RENDERER=pixman
|
|
export XDG_RUNTIME_DIR=''${XDG_RUNTIME_DIR:-/run/user/$(id -u)}
|
|
export XKB_DEFAULT_LAYOUT="us,us"
|
|
export XKB_DEFAULT_VARIANT=",intl"
|
|
export XKB_DEFAULT_OPTIONS="grp:alt_shift_toggle"
|
|
export CAGE_XKB_STATE_FILE="$XDG_RUNTIME_DIR/writter-deck-keyboard-layout"
|
|
rm -f "$CAGE_XKB_STATE_FILE"
|
|
exec ${cageWithLayoutState}/bin/cage -- ${pkgs.foot}/bin/foot
|
|
fi
|
|
'';
|
|
};
|
|
|
|
ssh = {
|
|
enable = true;
|
|
enableDefaultConfig = false;
|
|
|
|
settings = {
|
|
"*" = {
|
|
forwardAgent = false;
|
|
addKeysToAgent = "no";
|
|
compression = false;
|
|
serverAliveInterval = 0;
|
|
serverAliveCountMax = 3;
|
|
hashKnownHosts = false;
|
|
userKnownHostsFile = "~/.ssh/known_hosts";
|
|
controlMaster = "no";
|
|
controlPath = "~/.ssh/master-%r@%n:%p";
|
|
controlPersist = "no";
|
|
};
|
|
|
|
"pc" = {
|
|
hostname = "jpporta-nixos";
|
|
user = "jpporta";
|
|
serverAliveInterval = 30;
|
|
};
|
|
|
|
"pc-lan" = {
|
|
hostname = "192.168.0.100";
|
|
user = "jpporta";
|
|
serverAliveInterval = 30;
|
|
};
|
|
"pc-ts" = {
|
|
hostname = "jpporta-nixos";
|
|
user = "jpporta";
|
|
serverAliveInterval = 30;
|
|
};
|
|
};
|
|
};
|
|
};
|
|
|
|
services.syncthing.enable = true;
|
|
services.tailscale-systray.enable = true;
|
|
|
|
home.sessionVariables.TERMINAL = "foot";
|
|
}
|