6 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
9 changed files with 159 additions and 61 deletions

8
flake.lock generated
View File

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

View File

@@ -3,7 +3,7 @@
inputs = { inputs = {
# Specify the source of Home Manager and Nixpkgs. # 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 = { home-manager = {
url = "github:nix-community/home-manager"; url = "github:nix-community/home-manager";
inputs.nixpkgs.follows = "nixpkgs"; 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

View File

@@ -5,8 +5,9 @@
[core] [core]
pager = delta pager = delta
[delta]
side-by-side = true
[includeIf "gitdir:~/git/work/tcs/"] [includeIf "gitdir:~/git/work/tcs/"]
path = tcs.config path = tcs.config
[delta]
side-by-side = true

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.fira-code
pkgs.nerd-fonts.monoid pkgs.nerd-fonts.monoid
wezterm #wezterm
ghostty
# Editors # Editors
emacs emacs
@@ -65,6 +66,7 @@
# Dev tools # Dev tools
git git
lazygit lazygit
jujutsu
# Python # Python
python3 python3
@@ -123,7 +125,7 @@
XDG_BIN_HOME = "${config.home.homeDirectory}/.local/bin"; XDG_BIN_HOME = "${config.home.homeDirectory}/.local/bin";
#This variable is overriden. It does not work #This variable is overriden. It does not work
EDITOR = "hx"; EDITOR = "hx";
PAGER = "bat"; #PAGER = "bat";
}; };
home.sessionPath = [ "$XDG_BIN_HOME" ]; home.sessionPath = [ "$XDG_BIN_HOME" ];
@@ -146,7 +148,12 @@
home.shellAliases = { home.shellAliases = {
lg = "lazygit"; 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 = { programs.fish = {
@@ -168,9 +175,16 @@
}; };
#programs.neovim.enable = true; #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 = { programs.bash = {
enable = true; enable = true;
initExtra = '' initExtra = ''
@@ -187,7 +201,7 @@
xdg.configFile = let xdg.configFile = let
dotfiles = "${config.home.homeDirectory}/git/dotfiles"; dotfiles = "${config.home.homeDirectory}/git/dotfiles";
createDotlink = name: { createDotLink = name: {
source = config.lib.file.mkOutOfStoreSymlink "${dotfiles}/${name}/.config/${name}"; source = config.lib.file.mkOutOfStoreSymlink "${dotfiles}/${name}/.config/${name}";
recursive = true; recursive = true;
}; };
@@ -196,5 +210,7 @@
"git" = createDotLink "git"; "git" = createDotLink "git";
"niri" = createDotLink "niri"; "niri" = createDotLink "niri";
"jj" = createDotLink "jj"; "jj" = createDotLink "jj";
"helix" = createDotLink "helix";
"ghostty" = createDotLink "ghostty";
}; };
} }

View File

@@ -1,13 +1,14 @@
{ config, pkgs, ... }: { config, pkgs, ... }:
{ {
home.packages = with pkgs; [ home.packages = with pkgs; [
jujutsu
ansible ansible
awscli2 awscli2
cargo-cross cargo-cross
rustup rustup
rustc rustc
gcc gcc
python3Packages.jedi-language-server
ruff
vial vial
chromium chromium
]; ];

View File

@@ -2,16 +2,26 @@
[user] [user]
name = "J. Fernando Sánchez" name = "J. Fernando Sánchez"
email = "f.sanchez@thechannelstore.tv" email = "j@sanchezrada.es"
[[--scope]] [[--scope]]
--when.repositories = ["~/git/personal/"] --when.repositories = ["~/git/work/tcs"]
[--scope.user] [--scope.user]
email = "j@sanchezrada.es" 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] [ui]
pager = "delta" #":builtin" pager = "delta" #":builtin"
diff-formatter=":git" diff-formatter=":git"
paginate = "auto"
default-command = ["log", "--reversed"]
[merge-tools.delta] [merge-tools.delta]
diff-args=["--side-by-side", "$left", "$right", "--width=$width"] diff-args=["--color-only", "--side-by-side", "$left", "$right", "--width=$width"]

View File

@@ -148,7 +148,7 @@ output "DP-1" {
// https://github.com/YaLTeR/niri/wiki/Configuration:-Layout // https://github.com/YaLTeR/niri/wiki/Configuration:-Layout
layout { layout {
// Set gaps around windows in logical pixels. // Set gaps around windows in logical pixels.
gaps 5 gaps 0
// When to center a column when changing focus, options are: // When to center a column when changing focus, options are:
// - "never", default behavior, focusing an off-screen column will keep at the left // - "never", default behavior, focusing an off-screen column will keep at the left
@@ -295,10 +295,10 @@ layout {
// Top and bottom struts will simply add outer gaps in addition to the area occupied by // Top and bottom struts will simply add outer gaps in addition to the area occupied by
// layer-shell panels and regular gaps. // layer-shell panels and regular gaps.
struts { struts {
left 5 left 2
right 5 right 2
top 5 top 2
bottom 5 bottom 2
} }
} }
@@ -314,13 +314,9 @@ workspace "teams" {
open-on-output "eDP-1" open-on-output "eDP-1"
} }
workspace "3" {} workspace "notes" {
workspace "4" {} open-on-output "eDP-1"
workspace "5" {} }
workspace "6" {}
workspace "7" {}
workspace "8" {}
workspace "9" {}
// Add lines like this to spawn processes at startup. // Add lines like this to spawn processes at startup.
// Note that running niri as a session supports xdg-desktop-autostart, // Note that running niri as a session supports xdg-desktop-autostart,
@@ -355,7 +351,7 @@ animations {
// off // off
// Slow down all animations by this factor. Values below 1 speed them up instead. // 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. // Window rules let you adjust behavior for individual windows.
@@ -378,12 +374,14 @@ window-rule {
// - host Firefox (app-id is "firefox") // - host Firefox (app-id is "firefox")
// - Flatpak Firefox (app-id is "org.mozilla.firefox") // - Flatpak Firefox (app-id is "org.mozilla.firefox")
match app-id=r#"firefox$"# title="^Picture-in-Picture$" match app-id=r#"firefox$"# title="^Picture-in-Picture$"
default-column-width {}
open-floating true open-floating true
} }
window-rule { window-rule {
match app-id=r#"firefox$"# title="Bitwarden" match app-id="firefox" title=r#".*Bitwarden.*"#
open-floating true open-floating true
block-out-from "screen-capture"
} }
// Example: block out two password managers from screen capture. // Example: block out two password managers from screen capture.
@@ -426,7 +424,7 @@ binds {
Mod+Shift+Slash { show-hotkey-overlay; } Mod+Shift+Slash { show-hotkey-overlay; }
// Suggested binds for running programs: terminal, app launcher, screen locker. // 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+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"; } Mod+Delete hotkey-overlay-title="Lock the Screen: hyprlock" { spawn "hyprlock"; }
@@ -459,10 +457,15 @@ binds {
Mod+K { focus-window-up; } Mod+K { focus-window-up; }
Mod+L { focus-column-right; } 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+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+L { move-column-right-or-to-monitor-right; }
Mod+Ctrl+J { move-window-down-or-to-workspace-down; } Mod+Ctrl+K { move-window-up; }
Mod+Ctrl+K { move-window-up-or-to-workspace-up; }
Mod+Home { focus-column-first; } Mod+Home { focus-column-first; }
Mod+End { focus-column-last; } Mod+End { focus-column-last; }
@@ -479,30 +482,23 @@ binds {
Mod+Shift+K { focus-monitor-up; } Mod+Shift+K { focus-monitor-up; }
Mod+Shift+L { focus-monitor-right; } 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: // Alternatively, there are commands to move just a single window:
// Mod+Shift+Ctrl+Left { move-window-to-monitor-left; } // Mod+Shift+Ctrl+Left { move-window-to-monitor-left; }
// ... // ...
// And you can also move a whole workspace to another monitor: // And you can also move a whole workspace to another monitor:
Mod+Ctrl+Shift+H { move-workspace-to-monitor-left; } Ctrl+Alt+H { move-workspace-to-monitor-left; }
Mod+Ctrl+Shift+L { move-workspace-to-monitor-right; } Ctrl+Alt+L { move-workspace-to-monitor-right; }
Mod+Ctrl+Shift+J { move-workspace-to-monitor-down; } Ctrl+Alt+J { move-workspace-to-monitor-down; }
Mod+Ctrl+Shift+K { move-workspace-to-monitor-up; } Ctrl+Alt+K { move-workspace-to-monitor-up; }
// ... // ...
Mod+Page_Down { focus-workspace-down; } Mod+Page_Down { focus-workspace-down; }
Mod+Page_Up { focus-workspace-up; } Mod+Page_Up { focus-workspace-up; }
Mod+D { focus-workspace-down; } Mod+D { focus-workspace-down; }
Mod+U { focus-workspace-up; } Mod+U { focus-workspace-up; }
Mod+Ctrl+Page_Down { move-column-to-workspace-down; } Mod+Ctrl+Page_Down { move-column-to-workspace-down; }
Mod+Ctrl+Page_Up { move-column-to-workspace-up; } Mod+Ctrl+Page_Up { move-column-to-workspace-up; }
Mod+Ctrl+U { move-column-to-workspace-down; } Mod+Ctrl+U { move-column-to-workspace-down; }
@@ -559,24 +555,24 @@ binds {
// will all refer to the 3rd workspace. // will all refer to the 3rd workspace.
Mod+1 { focus-workspace "terminal"; } Mod+1 { focus-workspace "terminal"; }
Mod+2 { focus-workspace "firefox"; } Mod+2 { focus-workspace "firefox"; }
Mod+3 { focus-workspace "3"; } Mod+3 { focus-workspace "notes"; }
Mod+4 { focus-workspace "4"; } //Mod+4 { focus-workspace 4; }
Mod+5 { focus-workspace "5"; } //Mod+5 { focus-workspace "5"; }
Mod+6 { focus-workspace "6"; } //Mod+6 { focus-workspace "6"; }
Mod+7 { focus-workspace "7"; } //Mod+7 { focus-workspace "7"; }
Mod+8 { focus-workspace "8"; } //Mod+8 { focus-workspace "8"; }
Mod+9 { focus-workspace "9"; } //Mod+9 { focus-workspace "9"; }
Mod+grave { focus-workspace "teams"; } Mod+grave { focus-workspace "teams"; }
Mod+0 { focus-workspace "teams"; } Mod+0 { focus-workspace "teams"; }
Mod+Ctrl+1 { move-column-to-workspace "terminal"; } Mod+Ctrl+1 { move-column-to-workspace "terminal"; }
Mod+Ctrl+2 { move-column-to-workspace "firefox"; } Mod+Ctrl+2 { move-column-to-workspace "firefox"; }
Mod+Ctrl+3 { move-column-to-workspace "3"; } Mod+Ctrl+3 { move-column-to-workspace "notes"; }
Mod+Ctrl+4 { move-column-to-workspace "4"; } //Mod+Ctrl+4 { move-column-to-workspace "4"; }
Mod+Ctrl+5 { move-column-to-workspace "5"; } //Mod+Ctrl+5 { move-column-to-workspace "5"; }
Mod+Ctrl+6 { move-column-to-workspace "6"; } //Mod+Ctrl+6 { move-column-to-workspace "6"; }
Mod+Ctrl+7 { move-column-to-workspace "7"; } //Mod+Ctrl+7 { move-column-to-workspace "7"; }
Mod+Ctrl+8 { move-column-to-workspace "8"; } //Mod+Ctrl+8 { move-column-to-workspace "8"; }
Mod+Ctrl+9 { move-column-to-workspace "9"; } //Mod+Ctrl+9 { move-column-to-workspace "9"; }
Mod+Ctrl+0 { move-column-to-workspace "teams"; } Mod+Ctrl+0 { move-column-to-workspace "teams"; }
// Alternatively, there are commands to move just a single window: // Alternatively, there are commands to move just a single window:
@@ -600,6 +596,7 @@ binds {
Mod+Shift+R { switch-preset-window-height; } Mod+Shift+R { switch-preset-window-height; }
Mod+Ctrl+R { reset-window-height; } Mod+Ctrl+R { reset-window-height; }
Mod+F { maximize-column; } Mod+F { maximize-column; }
Mod+G { maximize-window-to-edges; }
Mod+Shift+F { fullscreen-window; } Mod+Shift+F { fullscreen-window; }
// Expand the focused column to space not taken up by other fully visible columns. // Expand the focused column to space not taken up by other fully visible columns.