Merge branch 'lolcathost-24.05'

This commit is contained in:
Emile Clark-Boman 2025-02-21 19:43:21 +10:00
commit 4175d8e0f6
12 changed files with 507 additions and 37 deletions

2
.gitignore vendored
View file

@ -0,0 +1,2 @@
ISSUES/
secrets/

67
DEV_ENV Normal file
View file

@ -0,0 +1,67 @@
This file will document what features I believe I need
for NixOS to be a good development environment.
Issues I've encountered:
- [X] Audio not working
- [ ] Tesseract is a pain in the ass to setup on Nix
- [ ] ags no longer supports `-t` flag, so applauncher won't work, requires switching to Astral
- [ ] script to enable/disable passwordless sudo
- [ ] Move Emile.Vault to new vault (I lost the password...)
- [ ] Add a simple and ugly bar
- [ ] Install powertop (funny name) for monitoring power usage by processes
- [ ] Try to make my battery life bettery
- [ ] Apply for JetBrains student license
- [ ] JetBrains Rider and VSCodium for C#
2. Imperative development environment behind NixOS (declarative),
similar to python's virtualenv but for the entirety of my system.
- [ ] Call my wishlist command "subspace (highway)" (Scott Pilgrim reference)
- [ ] Create a GitHub profile readme like this persons:
https://github.com/yuyudhn
- [ ] Set a new GitHub profile picture (like github:@Vendicated)
artists credit: https://dotpict.net/users/1598051
- [ ] Change GitHub location to /dev/zero, /dev/null, www, World Wide Web, etc
- [ ] Clean up my GitHub profile (only have things I'm proud of)
- [X] Put a template website on my VPS
- [ ] Put a neoweb-esque webiste on my VPS
- [ ] Host a blog on my VPS
- [ ] Clean laptop and PC, there's tons of unnecessary files and documents now
- [ ] Clean nixdots repo, start modularising it ^_^
- [ ] Disable `allowUnfree` in nixdots everywhere, if a program needs it then they
can `mkForce` override it
- [X] Add LSP for Nix in helix
- [ ] Make a way for me to put my laptop in a low power state, doing very specific actions like:
1. disabling LSP use by default temporarily
- [ ] Add https://github.com/levnikmyskin/hyprland-virtual-desktops
TODO:
- [X] make btop theming declarative
- [ ] Merge laptop and PC dotfiles repos
Cool Technologies:
- wishlist (by charmbracelet)
- Vaultwarden server + Keyguard client
- devbox
Random Idea List:
- [ ] powertop is cool but it's outdated and ugly, make a prettier one with charmbracelet's tui library
and call it powerbtm lmao
- [ ] Blog Post: a modern alternative to the suckless philosphy,
why GNU keeps failing cause their programs are amazing but
aren't designed for humans. suckless programs are excellent
too when writing shell scripts, but they suck in dev environments.
The solution is to gamify our code and focus on aesthetics
and "ergonomics" (usability) like what CharmBracelet does

18
HELIX_LSP_GUIDE Normal file
View file

@ -0,0 +1,18 @@
`gd` (goto definition when LSP is active)
`gy` (goto type definition)
`gr` (goto references)
`gi` (goto implementation)
`<space>k` (show documentation for item under cursor)
`<space>s` (show picker for symbols in file)
`<space>S` (show picker for symbols in workspace)
`<space>d` (document diagnostics picker for file)
`<space>D` (document diagnostics picker for workspace)
`<space>r` (rename symbol)
`<space>a` (apply code action, not show what that means though...)
`<space>h` (select symbol references)
`]d` (goto next diagnostic)
`[d` (goto previous diagnostic)
`]D` (goto last diagnostic in document)
`[D` (goto first diagnostic in document)

248
btop.conf.bak Normal file
View file

@ -0,0 +1,248 @@
#? Config file for btop v. 1.4.0
#* Name of a btop++/bpytop/bashtop formatted ".theme" file, "Default" and "TTY" for builtin themes.
#* Themes should be placed in "../share/btop/themes" relative to binary or "$HOME/.config/btop/themes"
color_theme = "Default"
#* If the theme set background should be shown, set to False if you want terminal background transparency.
theme_background = True
#* Sets if 24-bit truecolor should be used, will convert 24-bit colors to 256 color (6x6x6 color cube) if false.
truecolor = True
#* Set to true to force tty mode regardless if a real tty has been detected or not.
#* Will force 16-color mode and TTY theme, set all graph symbols to "tty" and swap out other non tty friendly symbols.
force_tty = False
#* Define presets for the layout of the boxes. Preset 0 is always all boxes shown with default settings. Max 9 presets.
#* Format: "box_name:P:G,box_name:P:G" P=(0 or 1) for alternate positions, G=graph symbol to use for box.
#* Use whitespace " " as separator between different presets.
#* Example: "cpu:0:default,mem:0:tty,proc:1:default cpu:0:braille,proc:0:tty"
presets = "cpu:1:default,proc:0:default cpu:0:default,mem:0:default,net:0:default cpu:0:block,net:0:tty"
#* Set to True to enable "h,j,k,l,g,G" keys for directional control in lists.
#* Conflicting keys for h:"help" and k:"kill" is accessible while holding shift.
vim_keys = False
#* Rounded corners on boxes, is ignored if TTY mode is ON.
rounded_corners = True
#* Default symbols to use for graph creation, "braille", "block" or "tty".
#* "braille" offers the highest resolution but might not be included in all fonts.
#* "block" has half the resolution of braille but uses more common characters.
#* "tty" uses only 3 different symbols but will work with most fonts and should work in a real TTY.
#* Note that "tty" only has half the horizontal resolution of the other two, so will show a shorter historical view.
graph_symbol = "braille"
# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty".
graph_symbol_cpu = "default"
# Graph symbol to use for graphs in gpu box, "default", "braille", "block" or "tty".
graph_symbol_gpu = "default"
# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty".
graph_symbol_mem = "default"
# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty".
graph_symbol_net = "default"
# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty".
graph_symbol_proc = "default"
#* Manually set which boxes to show. Available values are "cpu mem net proc" and "gpu0" through "gpu5", separate values with whitespace.
shown_boxes = "cpu mem net proc"
#* Update time in milliseconds, recommended 2000 ms or above for better sample times for graphs.
update_ms = 2000
#* Processes sorting, "pid" "program" "arguments" "threads" "user" "memory" "cpu lazy" "cpu direct",
#* "cpu lazy" sorts top process over time (easier to follow), "cpu direct" updates top process directly.
proc_sorting = "memory"
#* Reverse sorting order, True or False.
proc_reversed = False
#* Show processes as a tree.
proc_tree = False
#* Use the cpu graph colors in the process list.
proc_colors = True
#* Use a darkening gradient in the process list.
proc_gradient = True
#* If process cpu usage should be of the core it's running on or usage of the total available cpu power.
proc_per_core = False
#* Show process memory as bytes instead of percent.
proc_mem_bytes = True
#* Show cpu graph for each process.
proc_cpu_graphs = True
#* Use /proc/[pid]/smaps for memory information in the process info box (very slow but more accurate)
proc_info_smaps = False
#* Show proc box on left side of screen instead of right.
proc_left = False
#* (Linux) Filter processes tied to the Linux kernel(similar behavior to htop).
proc_filter_kernel = False
#* In tree-view, always accumulate child process resources in the parent process.
proc_aggregate = False
#* Sets the CPU stat shown in upper half of the CPU graph, "total" is always available.
#* Select from a list of detected attributes from the options menu.
cpu_graph_upper = "Auto"
#* Sets the CPU stat shown in lower half of the CPU graph, "total" is always available.
#* Select from a list of detected attributes from the options menu.
cpu_graph_lower = "Auto"
#* If gpu info should be shown in the cpu box. Available values = "Auto", "On" and "Off".
show_gpu_info = "Auto"
#* Toggles if the lower CPU graph should be inverted.
cpu_invert_lower = True
#* Set to True to completely disable the lower CPU graph.
cpu_single_graph = False
#* Show cpu box at bottom of screen instead of top.
cpu_bottom = False
#* Shows the system uptime in the CPU box.
show_uptime = True
#* Show cpu temperature.
check_temp = True
#* Which sensor to use for cpu temperature, use options menu to select from list of available sensors.
cpu_sensor = "Auto"
#* Show temperatures for cpu cores also if check_temp is True and sensors has been found.
show_coretemp = True
#* Set a custom mapping between core and coretemp, can be needed on certain cpus to get correct temperature for correct core.
#* Use lm-sensors or similar to see which cores are reporting temperatures on your machine.
#* Format "x:y" x=core with wrong temp, y=core with correct temp, use space as separator between multiple entries.
#* Example: "4:0 5:1 6:3"
cpu_core_map = ""
#* Which temperature scale to use, available values: "celsius", "fahrenheit", "kelvin" and "rankine".
temp_scale = "celsius"
#* Use base 10 for bits/bytes sizes, KB = 1000 instead of KiB = 1024.
base_10_sizes = False
#* Show CPU frequency.
show_cpu_freq = True
#* Draw a clock at top of screen, formatting according to strftime, empty string to disable.
#* Special formatting: /host = hostname | /user = username | /uptime = system uptime
clock_format = "%X"
#* Update main ui in background when menus are showing, set this to false if the menus is flickering too much for comfort.
background_update = True
#* Custom cpu model name, empty string to disable.
custom_cpu_name = ""
#* Optional filter for shown disks, should be full path of a mountpoint, separate multiple values with whitespace " ".
#* Begin line with "exclude=" to change to exclude filter, otherwise defaults to "most include" filter. Example: disks_filter="exclude=/boot /home/user".
disks_filter = ""
#* Show graphs instead of meters for memory values.
mem_graphs = True
#* Show mem box below net box instead of above.
mem_below_net = False
#* Count ZFS ARC in cached and available memory.
zfs_arc_cached = True
#* If swap memory should be shown in memory box.
show_swap = True
#* Show swap as a disk, ignores show_swap value above, inserts itself after first disk.
swap_disk = True
#* If mem box should be split to also show disks info.
show_disks = True
#* Filter out non physical disks. Set this to False to include network disks, RAM disks and similar.
only_physical = True
#* Read disks list from /etc/fstab. This also disables only_physical.
use_fstab = True
#* Setting this to True will hide all datasets, and only show ZFS pools. (IO stats will be calculated per-pool)
zfs_hide_datasets = False
#* Set to true to show available disk space for privileged users.
disk_free_priv = False
#* Toggles if io activity % (disk busy time) should be shown in regular disk usage view.
show_io_stat = True
#* Toggles io mode for disks, showing big graphs for disk read/write speeds.
io_mode = False
#* Set to True to show combined read/write io graphs in io mode.
io_graph_combined = False
#* Set the top speed for the io graphs in MiB/s (100 by default), use format "mountpoint:speed" separate disks with whitespace " ".
#* Example: "/mnt/media:100 /:20 /boot:1".
io_graph_speeds = ""
#* Set fixed values for network graphs in Mebibits. Is only used if net_auto is also set to False.
net_download = 100
net_upload = 100
#* Use network graphs auto rescaling mode, ignores any values set above and rescales down to 10 Kibibytes at the lowest.
net_auto = True
#* Sync the auto scaling for download and upload to whichever currently has the highest scale.
net_sync = True
#* Starts with the Network Interface specified here.
net_iface = ""
#* Show battery stats in top right if battery is present.
show_battery = True
#* Which battery to use if multiple are present. "Auto" for auto detection.
selected_battery = "Auto"
#* Show power stats of battery next to charge indicator.
show_battery_watts = True
#* Set loglevel for "~/.config/btop/btop.log" levels are: "ERROR" "WARNING" "INFO" "DEBUG".
#* The level set includes all lower levels, i.e. "DEBUG" will show all logging info.
log_level = "WARNING"
#* Measure PCIe throughput on NVIDIA cards, may impact performance on certain cards.
nvml_measure_pcie_speeds = True
#* Horizontally mirror the GPU graph.
gpu_mirror_graph = True
#* Custom gpu0 model name, empty string to disable.
custom_gpu_name0 = ""
#* Custom gpu1 model name, empty string to disable.
custom_gpu_name1 = ""
#* Custom gpu2 model name, empty string to disable.
custom_gpu_name2 = ""
#* Custom gpu3 model name, empty string to disable.
custom_gpu_name3 = ""
#* Custom gpu4 model name, empty string to disable.
custom_gpu_name4 = ""
#* Custom gpu5 model name, empty string to disable.
custom_gpu_name5 = ""

10
gitkraken_issue_solution Normal file
View file

@ -0,0 +1,10 @@
If gitkraken won't work make sure:
The ssh-agent is running and "$SSH_AUTH_SOCK" equals "$XDG_RUNTIME_DIR/ssh-agent"
(this is the known ssh-agent issue I've already solved).
Next make sure whatever you're cloning/etc from is in your ~/.ssh/known_hosts file
(if using ssh). Gitkraken may fail to do this automatically. ie for gitlab run:
```sh
ssh-keyscan -t rsa github.com >> ~/.ssh/known_hosts
```

1
gitkraken_themes Normal file
View file

@ -0,0 +1 @@
https://jonbunator.github.io/gitkraken-custom-themes/#dracula---source

View file

@ -16,6 +16,7 @@
../modules/fish.nix
../modules/editor/helix.nix
../modules/btop.nix
../modules/rio.nix
../modules/firefox.nix
../modules/nixcord.nix
@ -89,6 +90,25 @@
# these are both required for home-manager to work
home-manager.enable = true;
# set ssh profiles
# (all we need is hyrule, everything else is through wishlist)
# NOTE: (IMPORTANT) this DOES NOT start the ssh-agent
# for that you need to use `services.ssh-agent-enable`
ssh = {
enable = true;
forwardAgent = true;
addKeysToAgent = "yes"; # always add keys to ssh-agent
matchBlocks = {
hyrule = {
hostname = "imbored.dev";
user = "ae";
port = 22;
identityFile = "/home/me/.ssh/id_hyrule";
};
};
};
ags = {
enable = true;
configDir = ./ags;
@ -131,6 +151,11 @@
*/
};
# enable OpenSSH private key agent
services.ssh-agent.enable = true;
# the ssh-agent won't set this for itself...
systemd.user.sessionVariables.SSH_AUTH_SOCK = "$XDG_RUNTIME_DIR/ssh-agent";
# ----- SERVICES -----
# Nicely reload system units when changing configs
systemd.user.startServices = "sd-switch";

79
homes/modules/btop.nix Normal file
View file

@ -0,0 +1,79 @@
{config, ...}: {
programs.btop = {
enable = true;
settings = {
# Theming
color_theme = "dracula";
theme_background = true;
truecolor = true;
force_tty = false;
vim_keys = false; # allow vim keybindings
# Units
clock_format = "%I:%M %p, %b %d";
temp_scale = "celsius";
base_10_sizes = false; # use KB or KiB
# UI
background_update = true;
update_ms = 2000;
rounded_corners = false;
graph_symbol = "braille"; # braille/block/tty
graph_symbol_cpu = "default";
graph_symbol_mem = "default";
graph_symbol_net = "default";
graph_symbol_proc = "default";
# Processes Window
proc_left = true; # show on left side of window
proc_colors = true;
proc_gradient = true;
proc_per_core = false; # false: % of ALL cores
proc_mem_bytes = false; # show mem usage as %
proc_sorting = "cpu lazy";
proc_filter_kernel = false; # hide kernel child processes
proc_tree = false;
# CPU Window
cpu_bottom = false; # display at bottom of window
show_uptime = true;
show_cpu_freq = true;
check_temp = true; # show cpu temp
show_coretemp = true; # show temp per core
cpu_graph_upper = "total"; # upper graph shows total CPU usage
cpu_graph_lower = "user"; # lower graph shows user's CPU usage
cpu_invert_lower = true;
cpu_single_graph = false; # disable lower graph
show_gpu_info = "Off"; # Auto/On/Off
gpu_mirror_graph = false; # horizontally mirror gpu graph
# Memory Window
mem_below_net = false; # show below net window
mem_graphs = true; # show graphs not meters
show_swap = true; # show swap memory usage
# Disks Subwindow
show_disks = true; # split mem box to show disk info
swap_disk = true; # show swap memory as disk
show_io_stat = true;
io_graph_combined = false; # combine read/write stats
io_mode = true; # show io stat as graph
use_fstab = true; # read disk list from /etc/fstab
only_physical = false; # ignore non-physical disks
# Network Window
net_iface = ""; # default network interface to monitor
net_auto = true; # overrides net_download/net_upload (below)
net_sync = false; # sync download/upload graph scales
net_download = 100; # max download speed graphed
net_upload = 100; # max upload speed graphed
# Battery
show_battery = true;
selected_battery = "Auto";
show_battery_watts = true;
# Other
log_level = "WARNING"; # ERROR/WARNING/INFO/DEBUG
};
};
}

View file

@ -1,13 +1,10 @@
{
config,
pkgs,
...
}: {
{pkgs, ...}: {
# read https://docs.helix-editor.com/editor.html
programs.helix = {
enable = true;
settings = {
theme = "dracula";
editor = {
line-number = "absolute";
popup-border = "all";
@ -107,7 +104,8 @@
};
};
languages.language = [
languages = {
language = [
{
name = "nix";
indent = {
@ -120,6 +118,7 @@
};
auto-format = true;
formatter.command = "${pkgs.alejandra}/bin/alejandra";
language-servers = ["nixd"];
}
{
name = "python";
@ -131,5 +130,15 @@
rulers = [80];
}
];
language-server = {
# use nixd as default nix lsp (I haven't tried nil yet)
# NOTE: nixd will be supported by default after nix 24.07
# SOURCE: https://github.com/nix-community/nixd/blob/main/nixd/docs/editor-setup.md#Helix
nixd = {
command = "${pkgs.nixd}/bin/nixd";
};
};
};
};
}

View file

@ -0,0 +1,2 @@
# NOTE: hyprland must be enabled in BOTH your host config (for running hyprland)
# and your home-manager config (for managing hyprland's config files)

View file

@ -132,6 +132,9 @@ in {
# for graphical applications
flatpak
gnome-software
jetbrains.rider
gitkraken
];
};
@ -181,7 +184,8 @@ in {
easyeffects
ani-cli
wl-clipboard # clipboard for wayland
kcalc # TEMP: (FOR TESTING)
pavucontrol
(callPackage ./sddm-theme-corners.nix {}).sddm-theme-corners
# dependencies for my sddm theme:
@ -200,6 +204,11 @@ in {
tldr
btop
# TODO: once upgraded past Nix-24.07 this line won't be necessary (I think)
# helix will support nixd by default
# SOURCE: https://github.com/nix-community/nixd/blob/main/nixd/docs/editor-setup.md#Helix
nixd # lsp for nix
# Pretty necessary
git
brightnessctl

View file

@ -1,12 +1,12 @@
# NOTE: hyprland must be enabled in BOTH your host config (for running hyprland)
# and your home-manager config (for managing hyprland's config files)
{
pkgs,
inputs,
config,
lib,
...
}:
{
}: {
options.hyprland = {
enable = lib.mkEnableOption "Hyprland";
};