9 Commits

Author SHA1 Message Date
J. Fernando Sánchez
93aeb0019e Replace wezterm with ghostty
wezterm was consuming quite a lot of memory, and I wasn't really using
any of the advanced features.

I will reconsider if ghostty ends up using just as much.
2026-02-26 11:13:04 +01:00
J. Fernando Sánchez
9befba5522 jj: improve ux 2026-02-11 10:33:09 +01:00
J. Fernando Sánchez
1522c8d6a0 Add helix and LSP for python 2026-02-09 14:25:17 +01:00
J. Fernando Sánchez
f0bda1964e Update niri 2026-02-09 14:25:14 +01:00
J. Fernando Sánchez
80d1ed1528 Improve git config 2026-02-09 14:24:20 +01:00
J. Fernando Sánchez
2d074e0b09 Move to nixpkgs 25.10 2026-02-09 14:22:44 +01:00
J. Fernando Sánchez
cf50f8800b Home manager: Remove unnecessary git config 2026-02-05 10:45:19 +01:00
J. Fernando Sánchez
d0a86c9dc5 Home manager: Add niri and jj as symlinks
This follows in the steps of mimicking stow.
2026-02-05 10:45:19 +01:00
J. Fernando Sánchez
6cc37ee562 Add git config and several pkgs
I've added the config to symlink my dotfiles .git like I used to do with
stow.
2026-02-05 10:44:47 +01:00
13 changed files with 240 additions and 77 deletions

8
flake.lock generated
View File

@@ -22,16 +22,16 @@
},
"nixpkgs": {
"locked": {
"lastModified": 1756542300,
"narHash": "sha256-tlOn88coG5fzdyqz6R93SQL5Gpq+m/DsWpekNFhqPQk=",
"lastModified": 1770136044,
"narHash": "sha256-tlFqNG/uzz2++aAmn4v8J0vAkV3z7XngeIIB3rM3650=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "d7600c775f877cd87b4f5a831c28aa94137377aa",
"rev": "e576e3c9cf9bad747afcddd9e34f51d18c855b4e",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixos-unstable",
"ref": "nixos-25.11",
"repo": "nixpkgs",
"type": "github"
}

View File

@@ -3,7 +3,7 @@
inputs = {
# Specify the source of Home Manager and Nixpkgs.
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
nixpkgs.url = "github:nixos/nixpkgs/nixos-25.11";
home-manager = {
url = "github:nix-community/home-manager";
inputs.nixpkgs.follows = "nixpkgs";

View File

@@ -0,0 +1,59 @@
# This is the configuration file for Ghostty.
#
# This template file has been automatically created at the following
# path since Ghostty couldn't find any existing config files on your system:
#
# /home/j/.config/ghostty/config
#
# The template does not set any default options, since Ghostty ships
# with sensible defaults for all options. Users should only need to set
# options that they want to change from the default.
#
# Run `ghostty +show-config --default --docs` to view a list of
# all available config options and their default values.
#
# Additionally, each config option is also explained in detail
# on Ghostty's website, at https://ghostty.org/docs/config.
#
# Ghostty can reload the configuration while running by using the menu
# options or the bound key (default: Command + Shift + comma on macOS and
# Control + Shift + comma on other platforms). Not all config options can be
# reloaded while running; some only apply to new windows and others may require
# a full restart to take effect.
# Config syntax crash course
# ==========================
# # The config file consists of simple key-value pairs,
# # separated by equals signs.
font-family = Iosevka
# window-padding-x = 2
#
# # Spacing around the equals sign does not matter.
# # All of these are identical:
# key=value
# key= value
# key =value
# key = value
#
# # Any line beginning with a # is a comment. It's not possible to put
# # a comment after a config option, since it would be interpreted as a
# # part of the value. For example, this will have a value of "#123abc":
# background = black
#123abc
# theme = Dark Modern
# theme = Soft Server
# theme = Zenwritten Dark
# theme = Operator Mono Dark
# theme = Monokai Remastered
# theme = Solarized Dark Patched
theme = 3024 Night
#
# # Empty values are used to reset config keys to default.
# key =
#
# # Some config options have unique syntaxes for their value,
# # which is explained in the docs for that config option.
# # Just for example:
# resize-overlay-duration = 4s 200ms
keybind = ctrl+[=text:\x1b

13
git/.config/git/config Normal file
View File

@@ -0,0 +1,13 @@
[user]
name = J. Fernando Sánchez
email = j@sinpapel.es
[core]
pager = delta
[delta]
side-by-side = true
[includeIf "gitdir:~/git/work/tcs/"]
path = tcs.config

View File

@@ -0,0 +1,3 @@
[user]
name = J. Fernando Sánchez
email = f.sanchez@thechannelstore.tv

View File

@@ -1,10 +1,15 @@
[user]
name = J. Fernando Sánchez
email = balkian@gmail.com
email = j@sanchezrada.es
[diff]
tool = vimdiff
tool = delta
[alias]
d = difftool
[includeIf "gitdir:~/git/work/tcs"]
path = ~/.config/git/tcs.config
[include]
path = ~/.gitconfig_secret

View File

@@ -0,0 +1,14 @@
theme = "github_dark"
[editor]
line-number = "relative"
mouse = false
auto-pairs = false
[editor.cursor-shape]
insert = "bar"
normal = "block"
select = "underline"
[editor.file-picker]
hidden = false

View File

@@ -29,7 +29,8 @@
pkgs.nerd-fonts.fira-code
pkgs.nerd-fonts.monoid
wezterm
#wezterm
ghostty
# Editors
emacs
@@ -39,6 +40,7 @@
# Utils
jq
bat # Replacement for less
delta # Replacement for less (for git diff and the like)
eza # Better ld
zoxide # better cd
yazi # File manager
@@ -47,12 +49,13 @@
dust # File disk utilization
gnumake
zenith # System monitor
# Productivity
taskwarrior3
taskwarrior-tui
timewarrior
zenith # System monitor
# Shells
fish
grc # Colorizer
@@ -63,6 +66,7 @@
# Dev tools
git
lazygit
jujutsu
# Python
python3
@@ -120,7 +124,8 @@
home.sessionVariables = {
XDG_BIN_HOME = "${config.home.homeDirectory}/.local/bin";
#This variable is overriden. It does not work
EDITOR = "nvim";
EDITOR = "hx";
#PAGER = "bat";
};
home.sessionPath = [ "$XDG_BIN_HOME" ];
@@ -143,7 +148,12 @@
home.shellAliases = {
lg = "lazygit";
gs = "git status";
gs = "git status";
j = "jj";
js = "jj status";
jt = "jj tug";
jf = "jj git fetch";
jl = "jj log";
};
programs.fish = {
@@ -165,9 +175,16 @@
};
#programs.neovim.enable = true;
programs.neovim.defaultEditor = true;
#programs.neovim.defaultEditor = false;
#programs.helix.enable = true;
#programs.helix.defaultEditor = true;
programs.zoxide.enable = true;
programs.zoxide = {
enable = true;
options = [
"--cmd z"
];
};
programs.bash = {
enable = true;
initExtra = ''
@@ -181,6 +198,19 @@
fonts.fontconfig.enable = true;
xdg.configFile = let
dotfiles = "${config.home.homeDirectory}/git/dotfiles";
createDotLink = name: {
source = config.lib.file.mkOutOfStoreSymlink "${dotfiles}/${name}/.config/${name}";
recursive = true;
};
in {
"git" = createDotLink "git";
"niri" = createDotLink "niri";
"jj" = createDotLink "jj";
"helix" = createDotLink "helix";
"ghostty" = createDotLink "ghostty";
};
}

View File

@@ -1,18 +1,16 @@
{ config, pkgs, ... }:
{
home.packages = with pkgs; [
jujutsu
ansible
awscli2
tinybird
cargo-cross
rustup
rustc
gcc
python3Packages.jedi-language-server
ruff
vial
chromium
];
programs.git = {
enable = true;
userName = "Fernando Sánchez";
userEmail = "f.sanchez@thechannelstore.tv";
extraConfig = {
init.defaultBranch = "main";
};
};
}

View File

@@ -1,13 +1,4 @@
{ config, pkgs, ... }:
{
home.packages = with pkgs; [ ];
programs.git = {
enable = true;
userName = "J. Fernando Sánchez";
userEmail = "balkian@gmail.com";
extraConfig = {
init.defaultBranch = "main";
};
};
}

27
jj/.config/jj/config.toml Normal file
View File

@@ -0,0 +1,27 @@
"$schema" = "https://jj-vcs.github.io/jj/latest/config-schema.json"
[user]
name = "J. Fernando Sánchez"
email = "j@sanchezrada.es"
[[--scope]]
--when.repositories = ["~/git/work/tcs"]
[--scope.user]
name = "J. Fernando Sánchez"
email = "f.sanchez@thechannelstore.tv"
[aliases]
tug = ["bookmark", "move", "--from", "heads(::@- & bookmarks())", "--to", "@-"]
l = ["log"]
s = ["status"]
f = ["git", "fetch"]
p = ["git", "push"]
[ui]
pager = "delta" #":builtin"
diff-formatter=":git"
paginate = "auto"
default-command = ["log", "--reversed"]
[merge-tools.delta]
diff-args=["--color-only", "--side-by-side", "$left", "$right", "--width=$width"]

View File

@@ -0,0 +1,15 @@
customCommands:
# - key: "m"
# description: "Merge (noff, nocommit)"
# command: "git merge --no-ff --no-commit {{.SelectedBranch}}"
# context: "localBranches"
# output: terminal
- key: "m"
description: "Merge (noff, nocommit)"
command: "git merge --no-ff --no-commit {{.SelectedLocalBranch.Name}}"
context: "localBranches"
output: terminal
#keybindings:
# branches:
# merge: "m" # make the UI “Merge” use our custom command

View File

@@ -103,6 +103,7 @@ output "eDP-1" {
// If the position is unset or results in an overlap, the output is instead placed
// automatically.
position x=0 y=0
//position x=0 y=1080
}
output "DP-1" {
@@ -115,10 +116,15 @@ output "DP-1" {
// for the resolution.
// If the mode is omitted altogether or is invalid, niri will pick one automatically.
// Run `niri msg outputs` while inside a niri instance to list all outputs and their modes.
//mode "3840x2160@60"
mode "3840x2160@60"
scale 1.25
//mode "1920x1080@60"
//mode "2560x1440"
//scale 1
// You can use integer or fractional scale, for example use 1.5 for 150% scale.
scale 1.25
//scale 1.0
// Transform allows to rotate the output counter-clockwise, valid values are:
// normal, 90, 180, 270, flipped, flipped-90, flipped-180 and flipped-270.
@@ -134,6 +140,7 @@ output "DP-1" {
// If the position is unset or results in an overlap, the output is instead placed
// automatically.
position x=1920 y=-500
//position x=0 y=0
}
// Settings that influence how windows are positioned and sized.
@@ -141,7 +148,7 @@ output "DP-1" {
// https://github.com/YaLTeR/niri/wiki/Configuration:-Layout
layout {
// Set gaps around windows in logical pixels.
gaps 5
gaps 0
// When to center a column when changing focus, options are:
// - "never", default behavior, focusing an off-screen column will keep at the left
@@ -288,10 +295,10 @@ layout {
// Top and bottom struts will simply add outer gaps in addition to the area occupied by
// layer-shell panels and regular gaps.
struts {
left 5
right 5
top 5
bottom 5
left 2
right 2
top 2
bottom 2
}
}
@@ -307,13 +314,9 @@ workspace "teams" {
open-on-output "eDP-1"
}
workspace "3" {}
workspace "4" {}
workspace "5" {}
workspace "6" {}
workspace "7" {}
workspace "8" {}
workspace "9" {}
workspace "notes" {
open-on-output "eDP-1"
}
// Add lines like this to spawn processes at startup.
// Note that running niri as a session supports xdg-desktop-autostart,
@@ -348,7 +351,7 @@ animations {
// off
// Slow down all animations by this factor. Values below 1 speed them up instead.
slowdown 0.5
slowdown 0.75
}
// Window rules let you adjust behavior for individual windows.
@@ -371,12 +374,14 @@ window-rule {
// - host Firefox (app-id is "firefox")
// - Flatpak Firefox (app-id is "org.mozilla.firefox")
match app-id=r#"firefox$"# title="^Picture-in-Picture$"
default-column-width {}
open-floating true
}
window-rule {
match app-id=r#"firefox$"# title="Bitwarden"
match app-id="firefox" title=r#".*Bitwarden.*"#
open-floating true
block-out-from "screen-capture"
}
// Example: block out two password managers from screen capture.
@@ -419,7 +424,7 @@ binds {
Mod+Shift+Slash { show-hotkey-overlay; }
// Suggested binds for running programs: terminal, app launcher, screen locker.
Mod+return hotkey-overlay-title="Open a Terminal: wezterm" { spawn "wezterm"; }
Mod+return hotkey-overlay-title="Open a Terminal: ghostty" { spawn "ghostty"; }
Mod+space hotkey-overlay-title="Run an Application: wofi" { spawn "sh" "-c" "wofi --show dmenu,drun"; }
Mod+Delete hotkey-overlay-title="Lock the Screen: hyprlock" { spawn "hyprlock"; }
@@ -427,6 +432,9 @@ binds {
// Note: the entire command goes as a single argument in the end.
// Mod+T { spawn "bash" "-c" "notify-send hello && exec wezterm"; }
Ctrl+Alt+W { spawn "firefox" "--ProfileManager"; }
Ctrl+Alt+Q { spawn "chromium-browser" "--ozone-platform=wayland"; }
// Brightness control
XF86MonBrightnessUp allow-when-locked=true { spawn "brightnessctl" "s" "+5%"; }
XF86MonBrightnessDown allow-when-locked=true { spawn "brightnessctl" "s" "5%-"; }
@@ -449,10 +457,15 @@ binds {
Mod+K { focus-window-up; }
Mod+L { focus-column-right; }
//Mod+Alt+H { move-window-left; }
Mod+Alt+J { move-window-down; }
//Mod+Alt+L { move-window-right; }
Mod+Alt+K { move-window-up; }
Mod+Ctrl+H { move-column-left-or-to-monitor-left; }
Mod+Ctrl+J { move-window-down; }
Mod+Ctrl+L { move-column-right-or-to-monitor-right; }
Mod+Ctrl+J { move-window-down-or-to-workspace-down; }
Mod+Ctrl+K { move-window-up-or-to-workspace-up; }
Mod+Ctrl+K { move-window-up; }
Mod+Home { focus-column-first; }
Mod+End { focus-column-last; }
@@ -469,30 +482,23 @@ binds {
Mod+Shift+K { focus-monitor-up; }
Mod+Shift+L { focus-monitor-right; }
Ctrl+Alt+H { move-workspace-to-monitor-left; }
Ctrl+Alt+J { move-workspace-to-monitor-down; }
Ctrl+Alt+K { move-workspace-to-monitor-up; }
Ctrl+Alt+L { move-workspace-to-monitor-right; }
Mod+Alt+H { move-column-to-monitor-left; }
Mod+Alt+J { move-column-to-monitor-down; }
Mod+Alt+K { move-column-to-monitor-up; }
Mod+Alt+L { move-column-to-monitor-right; }
// Alternatively, there are commands to move just a single window:
// Mod+Shift+Ctrl+Left { move-window-to-monitor-left; }
// ...
// And you can also move a whole workspace to another monitor:
Mod+Ctrl+Shift+H { move-workspace-to-monitor-left; }
Mod+Ctrl+Shift+L { move-workspace-to-monitor-right; }
Mod+Ctrl+Shift+J { move-workspace-to-monitor-down; }
Mod+Ctrl+Shift+K { move-workspace-to-monitor-up; }
Ctrl+Alt+H { move-workspace-to-monitor-left; }
Ctrl+Alt+L { move-workspace-to-monitor-right; }
Ctrl+Alt+J { move-workspace-to-monitor-down; }
Ctrl+Alt+K { move-workspace-to-monitor-up; }
// ...
Mod+Page_Down { focus-workspace-down; }
Mod+Page_Up { focus-workspace-up; }
Mod+D { focus-workspace-down; }
Mod+U { focus-workspace-up; }
Mod+Ctrl+Page_Down { move-column-to-workspace-down; }
Mod+Ctrl+Page_Up { move-column-to-workspace-up; }
Mod+Ctrl+U { move-column-to-workspace-down; }
@@ -549,23 +555,24 @@ binds {
// will all refer to the 3rd workspace.
Mod+1 { focus-workspace "terminal"; }
Mod+2 { focus-workspace "firefox"; }
Mod+3 { focus-workspace "3"; }
Mod+4 { focus-workspace "4"; }
Mod+5 { focus-workspace "5"; }
Mod+6 { focus-workspace "6"; }
Mod+7 { focus-workspace "7"; }
Mod+8 { focus-workspace "8"; }
Mod+9 { focus-workspace "9"; }
Mod+3 { focus-workspace "notes"; }
//Mod+4 { focus-workspace 4; }
//Mod+5 { focus-workspace "5"; }
//Mod+6 { focus-workspace "6"; }
//Mod+7 { focus-workspace "7"; }
//Mod+8 { focus-workspace "8"; }
//Mod+9 { focus-workspace "9"; }
Mod+grave { focus-workspace "teams"; }
Mod+0 { focus-workspace "teams"; }
Mod+Ctrl+1 { move-column-to-workspace "terminal"; }
Mod+Ctrl+2 { move-column-to-workspace "firefox"; }
Mod+Ctrl+3 { move-column-to-workspace "3"; }
Mod+Ctrl+4 { move-column-to-workspace "4"; }
Mod+Ctrl+5 { move-column-to-workspace "5"; }
Mod+Ctrl+6 { move-column-to-workspace "6"; }
Mod+Ctrl+7 { move-column-to-workspace "7"; }
Mod+Ctrl+8 { move-column-to-workspace "8"; }
Mod+Ctrl+9 { move-column-to-workspace "9"; }
Mod+Ctrl+3 { move-column-to-workspace "notes"; }
//Mod+Ctrl+4 { move-column-to-workspace "4"; }
//Mod+Ctrl+5 { move-column-to-workspace "5"; }
//Mod+Ctrl+6 { move-column-to-workspace "6"; }
//Mod+Ctrl+7 { move-column-to-workspace "7"; }
//Mod+Ctrl+8 { move-column-to-workspace "8"; }
//Mod+Ctrl+9 { move-column-to-workspace "9"; }
Mod+Ctrl+0 { move-column-to-workspace "teams"; }
// Alternatively, there are commands to move just a single window:
@@ -589,6 +596,7 @@ binds {
Mod+Shift+R { switch-preset-window-height; }
Mod+Ctrl+R { reset-window-height; }
Mod+F { maximize-column; }
Mod+G { maximize-window-to-edges; }
Mod+Shift+F { fullscreen-window; }
// Expand the focused column to space not taken up by other fully visible columns.