So far everything works. Committing before a possible fuckup

This commit is contained in:
lulusilly 2025-09-21 13:18:38 -04:00
parent 4a2a081d91
commit ebb5f51a86
7 changed files with 480 additions and 0 deletions

24
dotfiles/ghostty/config Normal file
View file

@ -0,0 +1,24 @@
font-family = Monocraft Nerd Font
background-opacity = 0.8
theme = IC Orange PPL
mouse-hide-while-typing = true
keybind = super+n=new_window
keybind = super+h=goto_split:left
keybind = super+j=goto_split:down
keybind = super+k=goto_split:top
keybind = super+l=goto_split:right
keybind = super+a>h=new_split:left
keybind = super+a>j=new_split:down
keybind = super+a>k=new_split:up
keybind = super+a>l=new_split:right
keybind = super+a>f=toggle_split_zoom
keybind = super+a>n=next_tab
keybind = super+a>p=previous_tab
keybind = super+r=reload_config
window-save-state = always

163
dotfiles/kanata/conf.kbd Executable file
View file

@ -0,0 +1,163 @@
#|
Kanata Config
○ Ergonomic (kinda?) 34-key QWERTY layout
○ GACS home-row mods
○ Layers for function, number, media, and symbol keys
○ Dedicated (and non-intrusive!) standard layout toggle for reliant tasks
○ Decently commented for beginners and seasoned veterans alike.
FEEL FREE TO FORK!!!
|#
(defcfg
concurrent-tap-hold yes
movemouse-smooth-diagonals yes
)
#|
Trying to be minimal in order to reduce constant editing
of layer keys, not to mention how ugly having a 60% layout
is when you have mapped keys in the grid.
|#
(defsrc
caps
q w e r t y u i o p
a s d f g h j k l scln
z x c v b n m , . /
lmet spc rmet
)
;; Variables for clean code
(defvar
tap-time 200
hold-time 250
chord-time 50
)
;; Bindings
(defalias
;; Normal keyboard layer for gaming/other normie usage
normie (layer-switch norm)
;; Key chord definitions
chw (chord ch w)
che (chord ch e)
chi (chord ch i)
cho (chord ch o)
chs (chord ch s)
chd (chord ch d)
chk (chord ch k)
chl (chord ch l)
ch_lmet (chord ch lmet)
ch_rmet (chord ch rmet)
;; Remap Caps to Escape/Nav layer
navlayer (layer-while-held nav)
caps (tap-hold $tap-time $hold-time (tap-dance 200 (esc caps)) @navlayer)
;; Home row mods
a (tap-hold $tap-time $hold-time a lctl)
s (tap-hold $tap-time $hold-time s lalt)
d (tap-hold $tap-time $hold-time d lmet)
f (tap-hold $tap-time $hold-time f lsft)
j (tap-hold $tap-time $hold-time j rsft)
k (tap-hold $tap-time $hold-time k lmet)
l (tap-hold $tap-time $hold-time l lalt)
scln (tap-hold $tap-time $hold-time scln rctl)
;; Numpad layer
numpad (layer-while-held num)
g (tap-hold $tap-time $hold-time g @numpad)
;; Function key layer
fnkeys (layer-while-held fn)
h (tap-hold $tap-time $hold-time h @fnkeys)
#|
Hyper key when V or M are held down to allow for either hand to
use hyper key for AHK/Raycast shortcuts.
|#
v (tap-hold $tap-time $hold-time v (multi lsft lctl lalt))
m (tap-hold $tap-time $hold-time m (multi lsft lctl lalt))
;; Holding Spacebar activates symbol layer
symbols (layer-while-held symbol)
spc (tap-hold $tap-time $hold-time spc @symbols)
;; Media layer when Z or / are held.
medialy (layer-while-held md)
z (tap-hold $tap-time $hold-time z @medialy)
/ (tap-hold $tap-time $hold-time / @medialy)
)
;; Chord definitions. Kind of weird to read as a layperson
;; so I provided sufficient comments for general understanding.
(defchords ch $chord-time
(w ) w ;; W => W
( e) e ;; E => E
(w e) ret ;; W + E => Enter
(i ) i ;; I => I
( o) o ;; O => O
(i o) bspc ;; I + O => Backspace
(s ) @s ;; S => S
( d) @d ;; D => D
(s d) tab ;; S + D => Tab
(k ) @k ;; K => K (See defalias)
( l) @l ;; L => L (See defalias)
(k l) esc ;; K + L => Escape
(lmet ) (tap-dance $tap-time ((multi lsft lctl lalt lmet) lmet)) ;; LCmd => Hyper Key, LCmd × 2 => LCmd
( rmet) (tap-dance $tap-time ((multi lsft lctl lalt lmet) lmet)) ;; RCmd => Hyper Key, RAlt × 2 => RCmd
#|
Put simply, the below line allows for toggling a no-bind
layer for when you may require a standard layout (such as
playing Street Fighter, Counter Strike, etc.) by pressing
both Meta keys at the same time. You can toggle back to the
base layer by holding both Meta keys at the same time, as to allow
for normal functionality when holding either key down for a shortcut.
|#
(lmet rmet) (tap-hold $tap-time $hold-time @normie (layer-switch base))
)
;; Base layer with all binds enabled
(deflayer base
@caps
q @chw @che r t y u @chi @cho p
@a @chs @chd @f @g @h @j @chk @chl @scln
@z x c @v b n @m , . @/
@ch_lmet @spc @ch_rmet
)
;; Navigation layer
(deflayer nav
_
_ (movemouse-up 3 3) _ _ _ _ mlft mrgt pgup pgdn
(movemouse-left 3 3) (movemouse-down 3 3) (movemouse-right 3 3) _ home left down up right end
_ _ _ _ _ _ _ _ _ _
_ _ _
)
;; Numpad Layer
(deflayer num
_
_ _ _ _ _ _ 7 8 9 _
_ _ _ _ _ _ 4 5 6 0 _
_ _ _ _ _ 1 2 3 _
_ _ _
)
;; Function key layer
(deflayer fn
_
f1 f2 f3 f4 _ _ _ _ _ _
f5 f6 f7 f8 _ _ _ _ _ _ _
f9 f10 f11 f12 _ _ _ _ _
_ _ _
)
;; Symbol layer
(deflayer symbol
_
S-1 S-2 S-3 S-4 S-5 S-6 S-7 S-8 S-9 S-0
- S-= S-[ S-] [ ] S-` S-scln S-\ \
= _ _ ` _ S-- _ _ ' S-'
_ _ _
)
;; Aformentioned standard layer with combo binds for toggling back
;; to base layer.
(deflayer norm
esc
q w e r t y u i o p
a s d f g h j k l scln
z x c v b n m , . /
@ch_lmet spc @ch_rmet
)
;; Media layer
(deflayer md
_
_ _ _ _ _ _ _ _ _ _
prev pp next mute vold volu brdn brup ins del
_ _ _ _ _ _ _ _ _ _
_ _ _
)

8
dotfiles/skhd/skhdrc Normal file
View file

@ -0,0 +1,8 @@
# General Movement
alt - h : yabai -m window --focus west
alt - j : yabai -m window --focus south
alt - k : yabai -m window --focus north
alt - l : yabai -m window --focus east
# Open apps
alt - t : open -n -a "ghostty"

11
dotfiles/yabai/yabairc Normal file
View file

@ -0,0 +1,11 @@
yabai -m config layout bsp
yabai -m config window_placement second_child
yabai -m config top_padding 10
yabai -m config bottom_padding 10
yabai -m config left_padding 10
yabai -m config right_padding 10
yabai -m config window_gap 10
yabai -m config mouse_follows_focus on
yabai -m config mouse_modifier alt

140
flake.lock generated Normal file
View file

@ -0,0 +1,140 @@
{
"nodes": {
"brew-src": {
"flake": false,
"locked": {
"lastModified": 1756059815,
"narHash": "sha256-UALOxoXoFIHbwKzcqbqCAqw5cC0MJEehLaWSet5vxfE=",
"owner": "Homebrew",
"repo": "brew",
"rev": "02947ea4edbdef5fcce9ee57fa289547f4d096c9",
"type": "github"
},
"original": {
"owner": "Homebrew",
"ref": "4.6.7",
"repo": "brew",
"type": "github"
}
},
"home-manager": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1758207369,
"narHash": "sha256-BG7GlXo5moXtrFSCqnkIb1Q00szOZXTj5Dx7NmWgves=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "b5698ed57db7ee7da5e93df2e6bbada91c88f3ce",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "home-manager",
"type": "github"
}
},
"homebrew-cask": {
"flake": false,
"locked": {
"lastModified": 1758245667,
"narHash": "sha256-zfbroR4KhbUBD77DlPqHO6igkT6e3hiVmJxuSEk7Aag=",
"owner": "homebrew",
"repo": "homebrew-cask",
"rev": "d8aa9aadd1b2a4342b60062c3dc88d477634cf04",
"type": "github"
},
"original": {
"owner": "homebrew",
"repo": "homebrew-cask",
"type": "github"
}
},
"homebrew-core": {
"flake": false,
"locked": {
"lastModified": 1758247278,
"narHash": "sha256-azIe1WP5sj4Im3JRPcF0nKDjoXqnJHKs97Mw3m7eyRM=",
"owner": "homebrew",
"repo": "homebrew-core",
"rev": "bb75886332a24590b175f70bc1191d2c4c8870b5",
"type": "github"
},
"original": {
"owner": "homebrew",
"repo": "homebrew-core",
"type": "github"
}
},
"nix-darwin": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1758102940,
"narHash": "sha256-wwqf3+A8EiqwWpcAaPN20QXJLlpGPpwtLTrzgnngI2o=",
"owner": "nix-darwin",
"repo": "nix-darwin",
"rev": "ebd0bfc11fc2b5cff37401e9b3703881ad5fabbd",
"type": "github"
},
"original": {
"owner": "nix-darwin",
"ref": "master",
"repo": "nix-darwin",
"type": "github"
}
},
"nix-homebrew": {
"inputs": {
"brew-src": "brew-src"
},
"locked": {
"lastModified": 1756398546,
"narHash": "sha256-n4GVDLhKu65XFraJuCzap2AaZji4xhPaZMTJ8aQdD3s=",
"owner": "zhaofengli",
"repo": "nix-homebrew",
"rev": "3aa475996cb3bc1ecefa88c99c466e6f0bc17431",
"type": "github"
},
"original": {
"owner": "zhaofengli",
"repo": "nix-homebrew",
"type": "github"
}
},
"nixpkgs": {
"locked": {
"lastModified": 1758029226,
"narHash": "sha256-TjqVmbpoCqWywY9xIZLTf6ANFvDCXdctCjoYuYPYdMI=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "08b8f92ac6354983f5382124fef6006cade4a1c1",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixpkgs-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"root": {
"inputs": {
"home-manager": "home-manager",
"homebrew-cask": "homebrew-cask",
"homebrew-core": "homebrew-core",
"nix-darwin": "nix-darwin",
"nix-homebrew": "nix-homebrew",
"nixpkgs": "nixpkgs"
}
}
},
"root": "root",
"version": 7
}

94
flake.nix Normal file
View file

@ -0,0 +1,94 @@
{
description = "Personal nix-darwin system flake";
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
nix-darwin.url = "github:nix-darwin/nix-darwin/master";
nix-darwin.inputs.nixpkgs.follows = "nixpkgs";
home-manager.url = "github:nix-community/home-manager";
home-manager.inputs.nixpkgs.follows = "nixpkgs";
nix-homebrew.url = "github:zhaofengli/nix-homebrew";
homebrew-core = {
url = "github:homebrew/homebrew-core";
flake = false;
};
homebrew-cask = {
url = "github:homebrew/homebrew-cask";
flake = false;
};
};
outputs = inputs@{ self, nix-darwin, nix-homebrew, homebrew-core, homebrew-cask, home-manager, nixpkgs }:
let
configuration = { pkgs, ... }: {
users.users.erogers = {
name = "erogers";
home = "/Users/erogers";
};
environment.systemPackages = with pkgs; [
neovim # Text editor of choice
btop # Resource manager
iina # Media player
yabai # Tiling window manager
skhd # Hotkey daemon
# raycast # AI chat/Application launcher/Automation tool
# kanata # Keyboard remapping tool
];
services.yabai = {
enable = true;
extraConfig = builtins.readFile ./dotfiles/yabai/yabairc;
};
services.skhd = {
enable = true;
skhdConfig = builtins.readFile ./dotfiles/skhd/skhdrc;
};
system.primaryUser = "erogers";
system.defaults = {
dock.autohide = true;
finder.AppleShowAllExtensions = true;
};
nix.enable =false;
# Necessary for using flakes on this system.
nix.settings.experimental-features = "nix-command flakes";
# Allow unfree software
nixpkgs.config.allowUnfree = true;
# Allow for TouchID authentication when executing commands with sudo
security.pam.services.sudo_local.touchIdAuth = true;
# Set Git commit hash for darwin-version.
system.configurationRevision = self.rev or self.dirtyRev or null;
# Used for backwards compatibility, please read the changelog before changing.
# $ darwin-rebuild changelog
system.stateVersion = 6;
# The platform the configuration will be used on.
nixpkgs.hostPlatform = "aarch64-darwin";
};
in
{
# Build darwin flake using:
# $ darwin-rebuild build --flake .#Angrboda
darwinConfigurations."Angrboda" = nix-darwin.lib.darwinSystem {
modules = [
configuration
nix-homebrew.darwinModules.nix-homebrew {
nix-homebrew = {
enable = true;
enableRosetta = true;
user = "erogers";
autoMigrate = true;
};
}
home-manager.darwinModules.home-manager {
home-manager.useGlobalPkgs = true;
home-manager.useUserPackages = true;
home-manager.users.erogers = import ./home.nix;
}
];
};
};
}

40
home.nix Normal file
View file

@ -0,0 +1,40 @@
{ config, pkgs, ... }:
{
home.stateVersion = "25.05"; # Please read the comment before changing.
home.packages = with pkgs; [
irssi
];
# Home Manager is pretty good at managing dotfiles. The primary way to manage
# plain files is through 'home.file'.
home.file = {
# # Building this configuration will create a copy of 'dotfiles/screenrc' in
# # the Nix store. Activating the configuration will then make '~/.screenrc' a
# # symlink to the Nix store copy.
# ".screenrc".source = dotfiles/screenrc;
# # You can also set the file content immediately.
# ".gradle/gradle.properties".text = ''
# org.gradle.console=verbose
# org.gradle.daemon.idletimeout=3600000
# '';
};
# You can also manage environment variables but you will have to manually
# source
#
# ~/.nix-profile/etc/profile.d/hm-session-vars.sh
#
# or
#
# /etc/profiles/per-user/davish/etc/profile.d/hm-session-vars.sh
#
# if you don't want to manage your shell through Home Manager.
home.sessionVariables = {
EDITOR = "nvim";
};
programs.home-manager.enable = true;
}