dotfiles/homes/me/default.nix

846 lines
22 KiB
Nix
Raw Normal View History

2024-10-30 19:45:26 +10:00
{
inputs,
outputs,
lib,
config,
pkgs,
...
2024-11-07 17:37:15 +10:00
}: {
2024-10-30 19:45:26 +10:00
nixpkgs = {
2024-10-30 23:25:57 +10:00
config.allowUnfree = true;
2024-10-30 19:45:26 +10:00
};
2024-10-30 23:25:57 +10:00
imports = [
2024-11-07 17:37:15 +10:00
#inputs.nixcord.homeManagerModules.nixcord
2024-10-30 23:25:57 +10:00
# inputs.spicetify-nix.homeManagerModules.default
2024-11-04 11:59:14 +10:00
# ./wofi.nix
2024-11-07 17:37:15 +10:00
#../../modules/discord/nixcord.nix
2024-10-30 23:25:57 +10:00
];
/*
programs.spicetify =
let
spicePkgs = inputs.spicetify-nix.legacyPackages.${pkgs.system};
in
{
enable = true;
enabledExtensions = with spicePkgs.extensions; [
adblock
hidePodcasts
shuffle # shuffle+ (special characters are sanitized out of extension names)
];
theme = spicePkgs.themes.catppuccin;
colorScheme = "mocha";
};
*/
2024-10-30 19:45:26 +10:00
home = {
username = "me";
2024-11-07 17:37:15 +10:00
homeDirectory = "/home/me";
pointerCursor = {
gtk.enable = true;
# x11.enable = true # dont enable since im on hyprland
package = pkgs.bibata-cursors;
name = "Bibata-Modern-Ice";
size = 16;
};
2024-10-30 19:45:26 +10:00
};
2024-11-08 04:08:30 +10:00
gtk = {
enable = true;
font.name = "Victor Mono SemiBold 12";
theme = {
name = "Dracula";
package = pkgs.dracula-theme;
};
iconTheme = {
name = "kora";
package = pkgs.kora-icon-theme;
};
# TODO: use a variable to mirror this cursor size
# with the `home.pointerCurser.size`
cursorTheme = {
# dont set the theme (use system default instead)
# only set size to match the system
package = pkgs.bibata-cursors;
name = "Bibata-Modern-Ice";
size = 16;
};
};
# TODO: this lowkey doesnt work... (maybe the name "Dracula" is wrong?)
qt = {
enable = true;
platformTheme.name = "gtk2";
style.name = "gtk2";
};
services.hypridle = {
enable = true;
settings = {
general = {
ignore_dbus_inhibit = false;
lock_cmd = "pidof hyprlock || ${pkgs.hyprlock}/bin/hyprlock";
before_sleep_cmd = "loginctl lock-session";
after_sleep_cmd = "hyprctl dispatch dpms on";
};
listener = [
{
timeout = 600;
on-timeout = "pidof hyprlock || ${pkgs.hyprlock}/bin/hyprlock";
}
{
timeout = 660;
on-timeout = "systemctl suspend";
}
];
2024-11-08 04:08:30 +10:00
};
};
programs.hyprlock = {
enable = true;
settings = {
background = {
monitor = "";
path = "$HOME/downloads/1.png"; # only png supported for now
# color = $color1
# all these options are taken from hyprland, see https://wiki.hyprland.org/Configuring/Variables/#blur for explanations
blur_size = 4;
blur_passes = 3; # 0 disables blurring
noise = 0.0117;
contrast = 1.3000; # Vibrant!!!
brightness = 0.8000;
vibrancy = 0.2100;
vibrancy_darkness = 0.0;
};
label = [
{
# Hours
monitor = "";
text = ''cmd[update:1000] echo "<b><big> $(date +"%H") </big></b>"'';
color = "rgb(255, 255, 255, 1)";
font_size = 112;
font_family = "Geist Mono 10";
shadow_passes = 3;
shadow_size = 4;
position = "0, 240";
halign = "center";
valign = "center";
}
{
# Minutes
monitor = "";
text = ''cmd[update:1000] echo "<b><big> $(date +"%M") </big></b>"'';
color = "rgb(255, 255, 255, 1)";
font_size = 112;
font_family = "Geist Mono 10";
shadow_passes = 3;
shadow_size = 4;
position = "0, 120";
halign = "center";
valign = "center";
}
# Today
{
monitor = "";
text = ''cmd[update:18000000] echo "<b><big> "$(date +'%A')" </big></b>"'';
color = "rgb(255, 255, 255, 1)";
font_size = 22;
font_family = "JetBrainsMono Nerd Font 10";
position = "0, 30";
halign = "center";
valign = "center";
}
# Week
{
monitor = "";
text = ''cmd[update:18000000] echo "<b> "$(date +'%d %b')" </b>"'';
color = "rgb(255, 255, 255, 1)";
font_size = 18;
font_family = "JetBrainsMono Nerd Font 10";
position = "0, 6";
halign = "center";
valign = "center";
}
{
# Degrees
monitor = "";
# get temperature in Brisbane
text = ''cmd[update:18000000] echo "<b>Feels like<big> $(curl -s 'wttr.in/bne?format=%t' | tr -d '+') </big></b>"'';
color = "rgb(255, 255, 255, 1)";
font_size = 18;
font_family = "Geist Mono 10";
position = "0, 40";
halign = "center";
valign = "bottom";
}
];
input-field = {
monitor = "";
size = "300, 50";
outline_thickness = 3;
dots_size = 0.26; # Scale of input-field height, 0.2 - 0.8
dots_spacing = 0.64; # Scale of dots' absolute size, 0.0 - 1.0
dots_center = true;
dots_rouding = -1;
rounding = 22;
outer_color = "rgb(255, 0, 0, 1)";
inner_color = "rgb(0, 255, 0, 1)";
font_color = "rgb(0, 0, 255, 1)";
fade_on_empty = true;
placeholder_text = "!!Super Secret!!"; # Text rendered in the input box when it's empty.
position = "0, 120";
halign = "center";
valign = "bottom";
};
};
};
/*
programs.hyprlock = {
enable = true;
settings = {
general = {
grace = 5;
no_fade_in = false;
disable_loading_bar = false;
};
# BACKGROUND
background = {
monitor = "";
path = "../../../downloads/1.png";
blur_passes = 0;
contrast = 0.8916;
brightness = 0.7172;
vibrancy = 0.1696;
vibrancy_darkness = 0.0;
};
label = [
{
# Day-Month-Date
monitor = "";
text = ''cmd[update:1000] echo -e "$(date +"%A, %B %d")"'';
color = "rgb(255, 255, 255, 1)";
font_size = 28;
font_family = "JetBrainsMono Nerd Font Bold";
position = "0, 490";
halign = "center";
valign = "center";
}
# Time
{
monitor = "";
text = ''cmd[update:1000] echo "<span>$(date +"%I:%M")</span>"'';
color = "rgb(255, 255, 255, 1)";
font_size = 160;
font_family = "steelfish outline regular";
position = "0, 370";
halign = "center";
valign = "center";
}
# USER
{
monitor = "";
text = " $USER";
color = "rgb(255, 255, 255, 1)";
outline_thickness = 2;
dots_size = 0.2; # Scale of input-field height, 0.2 - 0.8
dots_spacing = 0.2; # Scale of dots' absolute size, 0.0 - 1.0
dots_center = true;
font_size = 18;
font_family = "JetBrainsMono Nerd Font Bold";
position = "0, -180";
halign = "center";
valign = "center";
}
];
# INPUT FIELD
input-field = [
{
monitor = "";
size = "300, 60";
outline_thickness = 2;
dots_size = 0.2; # Scale of input-field height, 0.2 - 0.8
dots_spacing = 0.2; # Scale of dots' absolute size, 0.0 - 1.0
dots_center = true;
outer_color = "rgba(255, 255, 255, 0)";
inner_color = "rgba(255, 255, 255, 0.1)";
font_color = "rgb(255, 255, 255, 1)";
fade_on_empty = false;
font_family = "JetBrainsMono Nerd Font Bold";
placeholder_text = "<i>🔒 Enter Password</i>";
hide_input = false;
position = "0, -250";
halign = "center";
valign = "center";
}
];
};
};
*/
2024-10-30 19:45:26 +10:00
programs = {
# these are both required for home-manager to work
home-manager.enable = true;
2024-11-07 17:37:15 +10:00
git = {
enable = true;
userName = "Emile Clark-Boman";
userEmail = "eclarkboman@gmail.com";
};
2024-11-04 11:59:14 +10:00
2024-10-30 23:25:57 +10:00
# like `/bin/cat` but with syntax highlighting
2024-11-07 17:37:15 +10:00
# TODO: change the pager (maybe use Github:sachaos/viddy instead)
bat = {
enable = true;
2024-10-30 23:25:57 +10:00
config = {
2024-11-07 17:37:15 +10:00
pager = "less -FR";
# let Stylix control the theme
#theme = "Dracula";
};
};
#nixvim = {
# enable = true;
# # TODO: allow clipboard to be configurable based on system clipboard
# colorschemes.dracula.enable = true;
# plugins = {
# lualine.enable = true;
# treesitter.enable = true;
# };
# opts = {
# number = true;
# tabstop = 4;
# softtabstop = 4;
# shiftwidth = 4;
# };
# clipboard.providers.wl-copy.enable = true;
#};
# read https://docs.helix-editor.com/editor.html
helix = {
enable = true;
settings = {
theme = "dracula";
editor = {
line-number = "absolute";
popup-border = "all";
scroll-lines = 3;
color-modes = true; # colour the mode indicator depending on mode
shell = ["zsh" "-c"];
auto-format = true;
auto-completion = true; # enable popup for autocomplete
completion-timeout = 250; # time before completions display
preview-completion-insert = true;
completion-trigger-len = 2; # min word length to trigger completions
completion-replace = true; # completions replace entire word
indent-heuristic = "tree-sitter"; # how indentation is computed
# TODO: make this configurable (enabled on myputer, disabled on lolcathost)
2024-11-07 17:37:15 +10:00
middle-click-paste = true;
insert-final-newline = true; # append newline to file on write
gutters = [
"diagnostics"
"spacer"
"line-numbers"
"spacer"
"diff"
];
whitespace = {
render = {
space = "none"; # "all"
tab = "none"; #"all"
nbsp = "none";
nnbsp = "none";
newline = "none";
};
characters = {
space = "·";
nbsp = "";
nnbsp = "";
tab = "";
newline = "";
tabpad = "·"; # Tabs will look like "→···" (depending on tab width)
};
};
indent-guides = {
render = true;
character = ""; # ""
skip-levels = 1;
};
lsp = {
enable = true;
auto-signature-help = true; # hints for function parameters
display-inlay-hints = true; # inline hints
snippets = true;
};
cursor-shape = {
normal = "block";
insert = "bar";
select = "block";
};
file-picker = {
hidden = true; # show hidden files
follow-symlinks = true;
deduplicate-links = true;
git-ignore = false; # dont read .gitignore files
ignore = true; # use .ignore for helix instead of .gitignore
};
statusline = {
left = [
"mode"
2024-11-08 04:08:30 +10:00
"spacer"
2024-11-07 17:37:15 +10:00
"version-control"
"spinner"
];
center = [
"file-name"
"read-only-indicator"
"file-modification-indicator"
];
right = [
"position"
"total-line-numbers"
"file-encoding"
"file-line-ending"
"file-type"
];
separator = "|";
mode.normal = "NORMAL";
mode.insert = "INSERT";
mode.select = "SELECT";
};
};
};
languages.language = [
{
name = "nix";
indent = {
tab-width = 2;
unit = " ";
};
block-comment-tokens = {
start = "/*";
end = "*/";
};
auto-format = true;
formatter.command = "${pkgs.alejandra}/bin/alejandra";
}
{
name = "python";
indent = {
tab-width = 4;
unit = " ";
};
auto-format = false; # my python is beautiful ^_^
rulers = [80];
}
];
};
nixcord = {
enable = true;
config = {
frameless = true;
plugins = {
# TODO: remove this plugin
hideAttachments.enable = true;
};
};
};
2024-11-07 17:37:15 +10:00
firefox = {
enable = true;
2024-11-04 11:59:14 +10:00
policies = {
2024-11-07 17:37:15 +10:00
#BlockAboutConfig = true;
DefaultDownloadDirectory = "\${home}/downloads";
};
};
2024-10-30 23:25:57 +10:00
2024-11-04 11:59:14 +10:00
# I want to use fish as my login shell but it always
2024-11-07 17:37:15 +10:00
# goes terrible cause it isn't POSIX compliant, so
# instead Bash is my login and it will just exec fish
#bash = {
# interactiveShellInit = ''
# if [[ $(${pkgs.procps}/bin/ps --no-header --pid=$PPID --format=comm) != "fish" && -z ''${BASH_EXECUTION_STRING} ]]
2024-11-04 11:59:14 +10:00
# then
# shopt -q login_shell && LOGIN_OPTION='--login' || LOGIN_OPTION=""
# exec ${pkgs.fish}/bin/fish $LOGIN_OPTION
2024-11-07 17:37:15 +10:00
# fi
# '';
#};
2024-11-04 11:59:14 +10:00
2024-11-07 17:37:15 +10:00
fish = {
enable = true;
interactiveShellInit = ''
2024-11-04 11:59:14 +10:00
set -g fish_greeting "Welcome weary traveler to my shop"
2024-11-07 17:37:15 +10:00
'';
plugins = [
{
name = "grc";
src = pkgs.fishPlugins.grc.src;
}
];
};
/*
spicetify =
let
spicePkgs = inputs.spicetify-nix.legacyPackages.${pkgs.system};
in
{
enable = true;
enabledExtensions = with spicePkgs.extensions; [
adblock
hidePodcasts
#shuffle
];
theme = spicePkgs.themes.catppuccin;
colorScheme = "mocha";
};
*/
2024-10-30 19:45:26 +10:00
# The terminal I use
2024-11-07 17:37:15 +10:00
# TODO: this is dependent on nvim being installed
# TODO: make this into a module with a configurable editor option
rio = {
enable = true;
# Rio Config Docs: https://raphamorim.io/rio/docs/config
settings = {
theme = "dracula";
hide-mouse-cursor-when-typing = true;
2024-10-30 19:45:26 +10:00
2024-11-07 17:37:15 +10:00
use-fork = true; # fork (dont spawn) Rio
2024-10-30 19:45:26 +10:00
2024-10-30 23:25:57 +10:00
padding-x = 10;
2024-11-07 17:37:15 +10:00
padding-y = [15 10]; # top, left
2024-10-30 23:25:57 +10:00
2024-11-07 17:37:15 +10:00
# lines = (accumulated scroll * multiplier / divider)
2024-10-30 23:25:57 +10:00
scroll = {
2024-11-07 17:37:15 +10:00
multiplier = 3.0;
divider = 1.0;
};
fonts = {
size = 15;
features = [];
regular = {
family = "JetBrainsMono Nerd Font"; # FiraCode
style = "Normal";
weight = 400;
};
bold = {
family = "JetBrainsMono Nerd Font";
style = "Normal";
weight = 800;
};
italic = {
family = "JetBrainsMono Nerd Font";
style = "Italic";
weight = 400;
};
bold-italic = {
family = "JetBrainsMono Nerd Font";
style = "Italic";
weight = 800;
};
};
# Run when the `OpenConfigEditor` keybinding is triggered
editor = {
program = "hx"; # helix
2024-11-07 17:37:15 +10:00
args = [];
};
renderer = {
performance = "High";
backend = "Automatic"; # Vulkan
};
};
};
2024-10-30 23:25:57 +10:00
wofi = {
2024-11-07 17:37:15 +10:00
enable = true;
settings = {
location = "center";
allow_markup = true;
width = 250;
};
# Force the style to stop Stylix being a bitch and overwriting it
style = lib.mkForce ''
@define-color rosewater #f2d5cf;
@define-color rosewater-rgb rgb(242, 213, 207);
@define-color flamingo #eebebe;
@define-color flamingo-rgb rgb(238, 190, 190);
@define-color pink #f4b8e4;
@define-color pink-rgb rgb(244, 184, 228);
@define-color mauve #ca9ee6;
@define-color mauve-rgb rgb(202, 158, 230);
@define-color red #e78284;
@define-color red-rgb rgb(231, 130, 132);
@define-color maroon #ea999c;
@define-color maroon-rgb rgb(234, 153, 156);
@define-color peach #ef9f76;
@define-color peach-rgb rgb(239, 159, 118);
@define-color yellow #e5c890;
@define-color yellow-rgb rgb(229, 200, 144);
@define-color green #a6d189;
@define-color green-rgb rgb(166, 209, 137);
@define-color teal #81c8be;
@define-color teal-rgb rgb(129, 200, 190);
@define-color sky #99d1db;
@define-color sky-rgb rgb(153, 209, 219);
@define-color sapphire #85c1dc;
@define-color sapphire-rgb rgb(133, 193, 220);
@define-color blue #8caaee;
@define-color blue-rgb rgb(140, 170, 238);
@define-color lavender #babbf1;
@define-color lavender-rgb rgb(186, 187, 241);
@define-color text #c6d0f5;
@define-color text-rgb rgb(198, 208, 245);
@define-color subtext1 #b5bfe2;
@define-color subtext1-rgb rgb(181, 191, 226);
@define-color subtext0 #a5adce;
@define-color subtext0-rgb rgb(165, 173, 206);
@define-color overlay2 #949cbb;
@define-color overlay2-rgb rgb(148, 156, 187);
@define-color overlay1 #838ba7;
@define-color overlay1-rgb rgb(131, 139, 167);
@define-color overlay0 #737994;
@define-color overlay0-rgb rgb(115, 121, 148);
@define-color surface2 #626880;
@define-color surface2-rgb rgb(98, 104, 128);
@define-color surface1 #51576d;
@define-color surface1-rgb rgb(81, 87, 109);
@define-color surface0 #414559;
@define-color surface0-rgb rgb(65, 69, 89);
@define-color base #303446;
@define-color base-rgb rgb(48, 52, 70);
@define-color mantle #292c3c;
@define-color mantle-rgb rgb(41, 44, 60);
@define-color crust #232634;
@define-color crust-rgb rgb(35, 38, 52);
* {
font-family: 'FiraCode Nerd Font';
font-size: 16px;
}
/* Window */
window {
margin: 0px;
padding: 10px;
border: 0.16em solid @teal;
border-radius: 0.5em;
background-color: @base;
animation: slideIn 0.25s ease-in-out both;
}
/* Slide In */
@keyframes slideIn {
0% {
opacity: 0;
}
100% {
opacity: 1;
}
}
/* Inner Box */
#inner-box {
margin: 5px;
padding: 10px;
border: none;
background-color: @base;
/*animation: fadeIn 0.5s ease-in-out both;*/
}
/* Fade In */
@keyframes fadeIn {
0% {
opacity: 0;
}
100% {
opacity: 1;
}
}
/* Outer Box */
#outer-box {
margin: 5px;
padding: 10px;
border: none;
background-color: @base;
}
/* Scroll */
#scroll {
margin: 0px;
padding: 10px;
border: none;
background-color: @base;
}
/* Input */
#input {
margin: 5px 20px;
padding: 10px;
border: none;
border-radius: 0.25em;
color: @text;
background-color: @base;
animation: fadeIn 0.25s ease-in-out both;
}
#input image {
border: none;
color: @red;
}
#input * {
outline: 4px solid @red!important;
}
/* Text */
#text {
margin: 5px;
border: none;
color: @text;
animation: fadeIn 0.5s ease-in-out both;
}
#entry {
background-color: @base;
}
#entry arrow {
border: none;
color: @teal;
}
/* Selected Entry */
#entry:selected {
border: 0.10em solid @teal;
border-radius: 0.25em;
}
#entry:selected #text {
color: @teal;
}
#entry:drop(active) {
background-color: @lavender!important;
}
'';
};
2024-10-30 19:45:26 +10:00
2024-11-07 17:37:15 +10:00
rofi = {
enable = true;
package = pkgs.rofi-wayland;
font = "JetBrains Mono Nerd Font 10";
location = "center";
terminal = "${pkgs.rio}/bin/rio";
};
};
2024-10-30 19:45:26 +10:00
2024-11-04 11:59:14 +10:00
# ----- SERVICES -----
2024-10-30 19:45:26 +10:00
services = {
# Change monitor positions
# TODO: find a way to make this modular (ie put something different for my laptop)
# my idea is to have a "monitors" module and use kanshi for wayland
kanshi = {
enable = true;
systemdTarget = "hyprland-session.target";
# You can find your monitors in hyprland by using `hyprctl monitors all`
settings = [
2024-11-07 17:37:15 +10:00
{
# 1920x1080@144 gaming monitor
output.criteria = "HDMI-A-1";
output.mode = "1920x1080@119.98Hz";
output.scale = 1.0;
output.adaptiveSync = false; # Variable Refresh Rate (this can be changed for gaming)
}
{
# 4k side monitor
output.criteria = "DP-2";
output.mode = "3840x2160@60.00Hz";
output.scale = 2.0;
}
{
# laptop builtin screen
output.criteria = "eDP-1";
output.mode = "1920x1080@60.02Hz";
output.scale = 1.0;
}
{
# This is my dual-monitor desktop setup
profile.name = "myputer";
2024-10-30 19:45:26 +10:00
profile.outputs = [
2024-11-07 17:37:15 +10:00
{
criteria = "DP-2";
position = "0,0";
}
{
criteria = "HDMI-A-1";
position = "3840,0";
}
];
}
{
# This is my laptop (lolcathost) :)
profile.name = "lolcathost";
profile.outputs = [
{
criteria = "eDP-1";
position = "0,0";
}
];
}
2024-10-30 19:45:26 +10:00
];
};
};
2024-11-04 11:59:14 +10:00
# Nicely reload system units when changing configs
systemd.user.startServices = "sd-switch";
home.stateVersion = "24.05"; # don't change this
2024-10-30 19:45:26 +10:00
}