nixconf/home-manager/home.nix

224 lines
6.3 KiB
Nix

{ config, pkgs, ... }:
{
# Home Manager needs a bit of information about you and the paths it should
# manage.
home.username = "blue";
home.homeDirectory = "/home/blue";
# This value determines the Home Manager release that your configuration is
# compatible with. This helps avoid breakage when a new Home Manager release
# introduces backwards incompatible changes.
#
# You should not change this value, even if you update Home Manager. If you do
# want to update the value, then make sure to first check the Home Manager
# release notes.
home.stateVersion = "24.05"; # Please read the comment before changing.
# The home.packages option allows you to install Nix packages into your
# environment.
home.packages = [
# add grimblast screenshot tool
pkgs.grimblast
pkgs.hyprpaper
# # It is sometimes useful to fine-tune packages, for example, by applying
# # overrides. You can do that directly here, just don't forget the
# # parentheses. Maybe you want to install Nerd Fonts with a limited number of
# # fonts?
# (pkgs.nerdfonts.override { fonts = [ "FantasqueSansMono" ]; })
# # You can also create simple shell scripts directly inside your
# # configuration. For example, this adds a command 'my-hello' to your
# # environment:
# (pkgs.writeShellScriptBin "my-hello" ''
# echo "Hello, ${config.home.username}!"
# '')
];
# 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
# '';
};
# Home Manager can also manage your environment variables through
# 'home.sessionVariables'. These will be explicitly sourced when using a
# shell provided by Home Manager. If you don't want to manage your shell
# through Home Manager then you have to manually source 'hm-session-vars.sh'
# located at either
#
# ~/.nix-profile/etc/profile.d/hm-session-vars.sh
#
# or
#
# ~/.local/state/nix/profiles/profile/etc/profile.d/hm-session-vars.sh
#
# or
#
# /etc/profiles/per-user/blue/etc/profile.d/hm-session-vars.sh
#
home.sessionVariables = {
# EDITOR = "emacs";
};
# Let Home Manager install and manage itself.
programs.home-manager.enable = true;
# Enable Hyprland compositor
wayland.windowManager.hyprland = {
enable = true;
package = pkgs.hyprland;
xwayland.enable = true;
# Autostart using systemd
systemd.enable = true;
extraConfig = ''
# exec-once = waybar
# Monitor settings
monitor = eDP-2, 2560x1600@165, 0x0, auto # main laptop monitor
monitor = DP-3, 1920x1080@60, -1280x-1080, auto # left external monitor
monitor = DP-2, 1920x1080@60, 640x-1080, auto # right external monitor
debug:disable_logs = false
# Move/resize windows with mainMod + LMB/RMB and dragging
bindm = $mod, mouse:272, movewindow
bindm = $mod, mouse:273, resizewindow
'';
};
# Hyprland configuration
wayland.windowManager.hyprland.settings = {
"$mod" = "SUPER";
input = { kb_layout = "gb"; };
bind =
[
# Keybinds for starting programs
"$mod, F, exec, firefox"
", Print, exec, grimblast copy area"
"$mod, 1, exec, alacritty"
"$mod, l, exec, hyprlock"
]
++ (
# workspaces
# binds $mod + [shift +] {1..10} to [move to] workspace {1..10}
builtins.concatLists (builtins.genList (
x: let
ws = let
c = (x + 1) / 10;
in
builtins.toString (x + 1 - (c * 10));
in [
"$mod, ${ws}, workspace, ${toString (x + 1)}"
"$mod SHIFT, ${ws}, movetoworkspace, ${toString (x + 1)}"
]
)
10)
);
};
programs.waybar = {
enable = true;
settings = {
mainBar = {
layer = "top";
position = "top";
height = 30;
output = [
"eDP-2"
"DP-2"
"DP-3"
];
modules-left = [ "wlr/workspaces" "wlr/mode" "wlr/taskbar" ];
modules-center = [ "wlr/window" "clock" ];
modules-right = [ "idle_inhibitor" "pulseaudio" "backlight" "battery" "tray" ];
"custom/hello-from-waybar" = {
format = "hello {}";
max-length = 40;
interval = "once";
exec = pkgs.writeShellScript "hello-from-waybar" ''
echo "from within waybar"
'';
};
};
};
};
programs.alacritty = {
enable = true;
package = pkgs.alacritty;
settings = {
window.dimensions = {
lines = 3;
columns = 200;
};
# keyboard.bindings = [
# {
# key = "K";
# mods = "Control";
# chars = "\\u000c";
# }
# ];
};
};
# programs.hyprpaper = {
# enable = true;
# settings = {
# ipc = "on";
# splash = false;
# splash_offset = 2.0;
# preload = [ "~/Pictures/wallpaper.png" ];
# wallpaper = [
# ",~/Pictures/wallpaper.png"
# ];
# };
# };
programs.hyprlock = {
enable = true;
settings = {
general = {
disable_loading_bar = true;
grace = 5;
hide_cursor = true;
no_fade_in = false;
};
background = [
{
path = "screenshot";
blur_passes = 3;
blur_size = 8;
}
];
input-field = [
{
size = "200, 50";
position = "0, -80";
monitor = "eDP-2";
dots_center = true;
fade_on_empty = false;
font_color = "rgb(202, 211, 245)";
inner_color = "rgb(91, 96, 120)";
outer_color = "rgb(24, 25, 38)";
outline_thickness = 5;
# placeholder_text = "<span foreground="##cad3f5">Password...</span>";
# shadow_passes = 2;
}
];
};
};
services.blueman-applet.enable = true;
}