Initial usable dragyx/flocke config

This commit is contained in:
Dragyx 2024-04-14 22:14:28 +02:00
commit 8b393be154
13 changed files with 568 additions and 64 deletions

View file

@ -0,0 +1,91 @@
{ config, lib, pkgs, ... }:
let
username = config.modules.other.system.username;
in
{
home-manager.users.${username} = {
programs = {
alacritty = {
enable = true;
};
alacritty.settings = {
shell = {
program = "zsh";
};
font.normal.family = "JetBrainsMono Nerd Font";
font.bold.family = "JetBrainsMono Nerd Font";
font.italic.family = "JetBrainsMono Nerd Font";
font.bold_italic.family = "JetBrainsMono Nerd Font";
window.opacity = 0.8;
# TODO: maybe use a different way to manage the theme
colors = {
primary = {
background = "#282a36";
foreground = "#f8f8f2";
bright_foreground = "#ffffff";
};
cursor = {
text = "CellBackground";
cursor = "CellForeground";
};
vi_mode_cursor = {
text = "CellBackground";
cursor = "CellForeground";
};
search = {
matches = {
foreground = "#44475a";
background = "#50fa7b";
};
focused_match = {
foreground = "#44475a";
background = "#ffb86c";
};
};
footer_bar = {
background = "#282a36";
foreground = "#f8f8f2";
};
hints = {
start = {
foreground = "#282a36";
background = "#f1fa8c";
};
end = {
foreground = "#f1fa8c";
background = "#282a36";
};
};
line_indicator = {
foreground = "None";
background = "None";
};
selection = {
text = "CellForeground";
background = "#44475a";
};
normal = {
black = "#21222c";
red = "#ff5555";
green = "#50fa7b";
yellow = "#f1fa8c";
blue = "#bd93f9";
magenta = "#ff79c6";
cyan = "#8be9fd";
white = "#f8f8f2";
};
bright = {
black = "#6272a4";
red = "#ff6e6e";
green = "#69ff94";
yellow = "#ffffa5";
blue = "#d6acff";
magenta = "#ff92df";
cyan = "#a4ffff";
white = "#ffffff";
};
};
};
};
};
}

View file

@ -0,0 +1,6 @@
_: {
imports = [
./alacritty.nix
];
}

View file

@ -3,6 +3,9 @@ _: {
./configuration.nix ./configuration.nix
./packages.nix ./packages.nix
./hyprland.nix ./hyprland.nix
./waybar.nix
./theming
./cli
]; ];

View file

@ -1,12 +1,11 @@
{ config, pkgs, ... }: { config, lib, pkgs, ... }:
with lib; with lib;
let let
username = config.modules.other.system.username; username = config.modules.other.system.username;
cfg = config.modules.WM.hyprland; cfg = config.modules.WM.hyprland;
in
{ {
config = mkIf cfg.enable { config = mkIf cfg.enable {
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
rofi-wayland rofi-wayland
@ -27,9 +26,8 @@ let
# hyprland settings # hyprland settings
home-manager.users.${username} = { home-manager.users.${username} = {
programs.waybar.enable = true;
wayland.windowManager.hyprland.settings = {
programs.hyprland.settings = {
input = { input = {
kb_layout = "us"; kb_layout = "us";
natural_scroll = true; natural_scroll = true;

View file

@ -0,0 +1,48 @@
{ config, pkgs, ... }:
# TODO: Make this more generic / reusable
let
username = config.modules.other.system.username;
gitPath = config.modules.other.system.gitPath;
catpuccin-rofi = pkgs.stdenv.mkDerivation {
pname = "catppuccin-rofi";
version = "0";
src = pkgs.fetchFromGitHub {
owner = "catppuccin";
repo = "rofi";
rev = "5350da41a11814f950c3354f090b90d4674a95ce";
sha256 = "sha256-DNorfyl3C4RBclF2KDgwvQQwixpTwSRu7fIvihPN8JY=";
};
installPhase = ''
mkdir -p $out/share/
mkdir -p $out/.config/
cp -r $src/basic/.config/rofi/* $out/.config/
cp -r $src/basic/.local/share/rofi/themes/* $out/share/
'';
};
in
{
home-manager.users.${username} = {
xdg.configFile."rofi".source = "${catpuccin-rofi}/.config";
xdg.dataFile."rofi/themes".source = "${catpuccin-rofi}/share";
programs.waybar.style = ./waybar-style.css;
wayland.windowManager.hyprland.settings.exec-once = [
"hyprshade auto"
"dunst"
"hyprpaper"
];
xdg.configFile."hypr/hyprpaper.conf" = { #TODO: generic path
text = ''
preload = ${gitPath}/hosts/dragyx/common/theming/wallpaper/default.jpg
wallpaper = ,${gitPath}/hosts/dragyx/common/theming/wallpaper/default.jpg
'';
};
};
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 MiB

View file

@ -0,0 +1,136 @@
/* Styles */
@define-color bar-back rgba(40, 40, 40, 0.2);
@define-color widget rgba(40, 40, 40, 0.8);
@define-color warning @bryellow;
@define-color critical red;
@define-color mode black;
@define-color unfocused @widget;
@define-color active rgba(100, 40, 40, 0.7);
@define-color focused red;/*rgba(100, 40, 40, 0.7);*/
@define-color inactive purple;
@define-color fg1 rgba(0, 0, 255, 1);
@define-color fg2 rgba(255, 0, 0, 1);
/* Reset all styles */
* {
border: none;
border-radius: 0;
min-height: 0;
margin: 0;
padding: 0;
box-shadow: none;
text-shadow: none;
-gtk-icon-shadow: none;
}
/* The whole bar */
#waybar {
background: @bar-back;
/*
background: rgba(0, 0, 0, 0);
*/
/*background-image: linear-gradient(to left, rgba(255, 100, 100, 100), rgba(255, 100, 100, 0));*/
background: linear-gradient(90deg, rgba(0,212,255,0.19089642693014708) 0%, rgba(255,255,255,0) 25%, rgba(255,255,255,0) 75%, rgba(248,0,255,0.2105042700674019) 100%);
color: @white;
font-family: JetBrains Mono;
font-size: 13pt;
}
/* Each module */
#battery,
#clock,
#cpu,
#language,
#memory,
#mode,
#network,
#pulseaudio-slider,
#temperature,
#tray,
#backlight,
#wireplumber,
#idle_inhibitor,
#disk,
#user,
#keyboard-state,
#workspaces button,
#custom-os-icon,
#mpris {
background: @widget;
margin: 0 0.2em 0 0.2em;
padding: 0em 0.3em 0em 0.3em;
border-radius: 0.35em;
}
#custom-os-icon {
min-width: 0.8em;
padding: 0 0.5em 0 0.1em; /*Otherwise the icon is not centered properly*/
}
#tray {
min-width: 0.8em;
}
#keyboard-state {
min-width: 2em;
color: white;
}
#workspaces button {
opacity: 100;
color: white;
}
/* Inactive (on unfocused output) */
#workspaces button.inactive {
background: @inactive;
}
#workspaces button.active {
background: @active;
}
#custom-os-icon {
color: rgba(150, 150, 255, 1);
margin: 0 1em 0 0.2em;
}
#wireplumber {
/*color: @fg1;*/
border-radius: 0 0.3em 0.3em 0;
}
#backlight {
/*color: @fg2;*/
border-radius: 0.3em 0 0 0.3em;
}
/* Active (on focused output) */
#workspaces button.focused {
opacity: 100;
background: @focused;
}
/* Contains an urgent window */
#workspaces button.urgent {
background: @warning;
}
/* Style when cursor is on the button */
#workspaces button:hover {
opacity: 110;
background: @focused;
}
#clock.date {
border-radius: 0.3em 0 0 0.3em;
min-width: 7em;
}
#clock.time{
/*border-radius: 0 0.3em 0.3em 0;*/
border-radius: 0;
min-width: 4em;
}

View file

@ -0,0 +1,197 @@
{ config, lib, pkgs, ... }:
with lib;
let
username = config.modules.other.system.username;
in
{
environment.systemPackages = with pkgs; [ waybar ];
home-manager.users.${username} = {
programs.waybar = {
systemd.enable = true;
settings = {
main = {
layer = "top";
position = "top";
modules-left = [
"custom/os-icon"
"hyprland/workspaces"
];
modules-center = [
"backlight"
"clock#time"
"wireplumber"
];
modules-right = [
"tray"
"network"
"battery"
];
# Modules
"custom/os-icon" = {
format = "\uf313"; #NixOS logo
};
battery = {
interval = 10;
states = {
warning = 30;
critical = 15;
};
format-time = "{H}:{M:02}";
format = "{icon} {capacity}%";
format-charging = " {capacity}%";
format-charging-full = " {capacity}%";
format-full = "{icon} {capacity}%";
format-icons = [
""
""
""
""
""
];
tooltip = false;
};
"clock#time" = {
interval = 10;
format = "{:%H:%M}";
tooltip = false;
};
"clock#date" = {
interval = 20;
format = "{:%d.%m.%Y}";
tooltip = false;
};
memory = {
interval = 5;
format = " {used:0.1f}G/{total:0.1f}G";
states = {
warning = 70;
critical = 90;
};
tooltip = false;
};
network = {
interval = 5;
format-wifi = "{icon} {essid}";
format-ethernet = "\udb80\ude01 {ifname}";
format-disconnected = "\uf0202 Offline";
format-alt = "\udb80\uddda {bandwidthDownBytes} \udb81\udd52 {bandwidthUpBytes} \udb82\ude5f {ipaddr}/{cidr}";
format-icons = [
"\udb82\udd28 "
"\udb82\udd25 "
"\udb82\udd22 "
"\udb82\udd1f "
"\udb82\udd2f "
];
tooltip = false;
};
"hyprland/mode" = {
format = "test{}";
tooltip = false;
};
"hyprland/window" = {
format = "{}";
max-length = 30;
tooltip = false;
rewrite = {
"([Aa]lacritty|kitty)" = "\ue795 $1";
"(.*) .{15} Mozilla Firefox" = "\ue745 $1";
"(^Spotify.*)" = "\uf1bc $1";
};
};
"hyprland/workspaces" = {
disable-scroll-wraparound = true;
smooth-scrolling-threshold = 4;
enable-bar-scroll = true;
format = "{icon}";
format-icons = {
"1" = "";
"2" = "";
"3" = "";
"4" = "";
"5" = "";
"6" = "";
"7" = "";
"8" = "";
"9" = "";
"10" = "";
"11" = "";
"12" = "";
};
};
"pulseaudio/slider" = {
min = 0;
max = 100;
orientation = "horizontal";
};
pulseaudio = {
format = "{icon} {volume}%";
format-bluetooth = "{icon} {volume}%";
format-muted = "";
format-icons = {
headphone = "";
hands-free = "";
headset = "";
phone = "";
portable = "";
car = "";
default = [
""
""
];
};
scroll-step = 1;
on-click = "pactl set-sink-mute @DEFAULT_SINK@ toggle";
tooltip = false;
};
user = {};
temperature = {
critical-threshold = 90;
interval = 5;
format = " {icon} {temperatureC}°";
format-icons = [
""
""
""
""
""
];
tooltip = false;
};
backlight = {
format = "{percent}% {icon} ";
format-icons = [
"\udb80\udf36"
"\udb86\ude4e"
"\udb86\ude4f"
"\udb86\ude50"
"\udb86\ude51"
"\udb86\ude52"
"\udb86\ude53"
"\udb86\ude54"
"\udb86\ude55"
"\udb86\ude56"
"\udb81\udee8"
];
};
wireplumber = {
format = "{icon} {volume}%";
format-muted = "\udb81\udd81";
format-icons = [
"\uf026"
"\uf027"
"\udb81\udd7e"
];
};
tray = {
icon-size = 18;
};
};
};
};
};
}

View file

@ -2,7 +2,7 @@
{ {
imports = [ imports = [
../configuration.nix ../common/default.nix
../../../options/common/pin-registry.nix ../../../options/common/pin-registry.nix
../../../options/common/preserve-system.nix ../../../options/common/preserve-system.nix
../../../options/desktop/fonts.nix ../../../options/desktop/fonts.nix
@ -127,6 +127,7 @@
refresh_rate = 60; refresh_rate = 60;
} }
]; ];
wayland = true;
}; };
home-manager = { home-manager = {
enable = true; enable = true;
@ -137,9 +138,10 @@
vesktop.enable = false; vesktop.enable = false;
btop.enable = true; btop.enable = true;
mpv.enable = true; mpv.enable = true;
schizofox.enable = true; schizofox.enable = false;
obs.enable = true; obs.enable = true;
vivado.enable = true; # vivado.enable = true;
rofi.enable = true;
# neovim.enable = true; # neovim.enable = true;
git = { git = {
enable = true; enable = true;

View file

@ -41,18 +41,19 @@ in
wl-clipboard wl-clipboard
]; ];
wayland.windowManager.hyprland = { wayland.windowManager.hyprland = {
enable = true; enable = true;
systemd.enable = true; systemd.enable = true;
xwayland.enable = true; xwayland.enable = true;
settings = { settings = {
exec-once = if cfg.gnome-keyring then ["${pkgs.polkit_gnome}/libexec/polkit-gnome-authentication-agent-1"] exec-once = (if cfg.gnome-keyring then
["${pkgs.polkit_gnome}/libexec/polkit-gnome-authentication-agent-1"]
else []); else []);
monitor = map ( monitor = map (
m: "${m.device},${builtins.toString m.resolution.x}x${builtins.toString m.resolution.y}@${builtins.toString m.refresh_rate},${builtins.toString m.position.x}x${builtins.toString m.position.y},${builtins.toString m.scale},transform,${builtins.toString m.transform}" m: "${m.device},${builtins.toString m.resolution.x}x${builtins.toString m.resolution.y}@${builtins.toString m.refresh_rate},${builtins.toString m.position.x}x${builtins.toString m.position.y},${builtins.toString m.scale},transform,${builtins.toString m.transform}"
) monitors; #TODO: default value ) monitors; #TODO: default value
};
}; };
}; };
}; };
};
} }

View file

@ -9,7 +9,8 @@ _: {
./zathura.nix ./zathura.nix
./obs.nix ./obs.nix
./foot.nix ./foot.nix
# ./vivado.nix ./rofi.nix
./vivado2.nix
./WM ./WM
./alacritty.nix ./alacritty.nix
./firefox.nix ./firefox.nix

View file

@ -0,0 +1,22 @@
{ config, pkgs, lib, ... }:
with lib;
let
username = config.modules.other.system.username;
cfg = config.modules.programs.rofi;
in
{
options.modules.programs.rofi.enable = mkEnableOption "rofi";
options.modules.other.system.wayland = mkOption {
type = types.bool;
description = "Does this system use wayland?";
default = false;
}; #FIXME: move this to the (hopefully then) refactored options directory
config = mkIf cfg.enable {
environment.systemPackages = with pkgs; [
(if config.modules.other.system.wayland then rofi-wayland else rofi)
];
};
}

View file

@ -1,58 +1,57 @@
{ config, lib, pkgs, ...}: { config, lib, pkgs, ...}:
with lib;
let let
vivado-desktop-symbol = pkgs.makeDesktopItem { vivado-desktop-symbol = pkgs.makeDesktopItem {
name = "vivado-2022_2"; name = "vivado-2022_2";
desktopName = "Vivado"; desktopName = "Vivado";
exec = "${pkgs.nur.repos.lschuermann.vivado-2022_2}/bin/vivado"; exec = "${pkgs.nur.repos.lschuermann.vivado-2022_2}/bin/vivado";
}; };
cfg = with lib; [ config.modules.programs.vivado ]; cfg = config.modules.programs.vivado;
username = with lib; [ config.modules.other.system.username ]; username = config.modules.other.system.username;
in in
{ {
options.modules.programs.vivado.enable = mkEnableOption "vivado"; options.modules.programs.vivado.enable = mkEnableOption "vivado";
config = mkIf cfg.enable { config = mkIf cfg.enable {
home-manager.users.${username} = { environment.systemPackages = with pkgs; [
environment.systemPackages = with pkgs; [ # this propietary software is huge, but I need it for
# this propietary software is huge, but I need it for # university
# university pkgs.nur.repos.lschuermann.vivado-2022_2
pkgs.nur.repos.lschuermann.vivado-2022_2 vivado-desktop-symbol
vivado-desktop-symbol ];
];
# Create udev rules. Reference: https://blog.kotatsu.dev/posts/2021-09-14-vivado-on-nixos/ # Create udev rules. Reference: https://blog.kotatsu.dev/posts/2021-09-14-vivado-on-nixos/
services.udev.packages = [ services.udev.packages = [
(pkgs.writeTextFile { (pkgs.writeTextFile {
name = "xilinx-dilligent-usb-udev"; name = "xilinx-dilligent-usb-udev";
destination = "/etc/udev/rules.d/52-xilinx-digilent-usb.rules"; destination = "/etc/udev/rules.d/52-xilinx-digilent-usb.rules";
text = '' text = ''
ATTR{idVendor}=="1443", MODE:="666" ATTR{idVendor}=="1443", MODE:="666"
ACTION=="add", ATTR{idVendor}=="0403", ATTR{manufacturer}=="Digilent", MODE:="666" ACTION=="add", ATTR{idVendor}=="0403", ATTR{manufacturer}=="Digilent", MODE:="666"
''; '';
}) })
(pkgs.writeTextFile { (pkgs.writeTextFile {
name = "xilinx-pcusb-udev"; name = "xilinx-pcusb-udev";
destination = "/etc/udev/rules.d/52-xilinx-pcusb.rules"; destination = "/etc/udev/rules.d/52-xilinx-pcusb.rules";
text = '' text = ''
ATTR{idVendor}=="03fd", ATTR{idProduct}=="0008", MODE="666" ATTR{idVendor}=="03fd", ATTR{idProduct}=="0008", MODE="666"
ATTR{idVendor}=="03fd", ATTR{idProduct}=="0007", MODE="666" ATTR{idVendor}=="03fd", ATTR{idProduct}=="0007", MODE="666"
ATTR{idVendor}=="03fd", ATTR{idProduct}=="0009", MODE="666" ATTR{idVendor}=="03fd", ATTR{idProduct}=="0009", MODE="666"
ATTR{idVendor}=="03fd", ATTR{idProduct}=="000d", MODE="666" ATTR{idVendor}=="03fd", ATTR{idProduct}=="000d", MODE="666"
ATTR{idVendor}=="03fd", ATTR{idProduct}=="000f", MODE="666" ATTR{idVendor}=="03fd", ATTR{idProduct}=="000f", MODE="666"
ATTR{idVendor}=="03fd", ATTR{idProduct}=="0013", MODE="666" ATTR{idVendor}=="03fd", ATTR{idProduct}=="0013", MODE="666"
ATTR{idVendor}=="03fd", ATTR{idProduct}=="0015", MODE="666" ATTR{idVendor}=="03fd", ATTR{idProduct}=="0015", MODE="666"
''; '';
}) })
(pkgs.writeTextFile { (pkgs.writeTextFile {
name = "xilinx-ftdi-usb-udev"; name = "xilinx-ftdi-usb-udev";
destination = "/etc/udev/rules.d/52-xilinx-ftdi-usb.rules"; destination = "/etc/udev/rules.d/52-xilinx-ftdi-usb.rules";
text = '' text = ''
ACTION=="add", ATTR{idVendor}=="0403", ATTR{manufacturer}=="Xilinx", MODE:="666" ACTION=="add", ATTR{idVendor}=="0403", ATTR{manufacturer}=="Xilinx", MODE:="666"
''; '';
}) })
]; ];
};
}; };
} }