dotfiles/homes/me/default.nix

604 lines
15 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-11-04 11:59:14 +10:00
# ----- STYLIX -----
2024-11-07 17:37:15 +10:00
2024-11-04 11:59:14 +10:00
#stylix = {
# enable = true;
#
# image = pkgs.fetchurl {
# url = "https://www.pixelstalk.net/wp-content/uploads/2016/05/Epic-Anime-Awesome-Wallpapers.jpg";
# sha256 = "enQo3wqhgf0FEPHj2coOCvo7DuZv+x5rL/WIo4qPI50=";
# };
2024-11-07 17:37:15 +10:00
#
2024-11-04 11:59:14 +10:00
# # Stylix will automatically theme applications
# autoEnable = true;
# targets = {
# # disable Stylix's themes for ones I will theme manually
# firefox.enable = false;
# wofi.enable = false;
# };
#};
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
};
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
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"
"version-control"
"spinner"
];
center = [
"file-name"
"read-only-indicator"
"file-modification-indicator"
];
right = [
"position"
"total-line-numbers"
"separator"
"file-encoding"
"file-line-ending"
"separator"
"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;
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 = "nvim";
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
}