2 Commits

Author SHA1 Message Date
biscuit a1c4841580 test 2025-06-30 13:29:56 -05:00
biscuit 62d8d36ed8 test 2025-06-30 12:49:36 -05:00
122 changed files with 3143 additions and 1673 deletions
-7
View File
@@ -1,7 +0,0 @@
keys:
- &user_kenji age1dhmt5tdyxd9zam542zkr9hq4tku7lzmf6j057sjtepk80deky5fqemczs5
creation_rules:
- path_regex: secrets/[^/]+\.(yaml|json|env|ini)$
key_groups:
- age:
- *user_kenji
+54 -54
View File
@@ -1,58 +1,58 @@
# HakaseOS # Sakamoto NixOS
HakaseOS is an opinionated NixOS configuration heavily inspired by OmarchyOS.
## Features Sakamoto NixOS is built with various profiles intended for reproducibility.
* Vim keybindings
* TUI applications
* Simple Setup
* Pre-configured Firefox
## How to Use SOPS ## Available Hosts
SOPS is an important aspect of this operating system. Learning to use it is important for security and modularity. It is impertinent that you do not lose the `private key`, as it is irrecoverable.
To get started, follow the instructions below. - MacBook M series
1. Create a folder. - Linux
```sh
mkdir -p ~/.config/sops/age
```
2. Generate a private key using `age`
```sh
nix-shell -p age --run "age-keygen -o ~/.config/sops/age/keys.txt"
```
**OR**
Use `ssh-to-age` to convert `id_ed22519` to `age`.
```sh
nix-shell -p ssh-to-age --run "ssh-to-age -private-key -i ~/.ssh/id_ed25519 > ~/.config/sops/age/keys.txt"
```
There are other ways of generating a private key. Refer to [sops-nix](https://github.com/Mic92/sops-nix).
3. Get a **public key**.
```sh
nix-shell -p age --run "age-keygen -y ~/.config/sops/age/keys.txt"
```
4. On the same directory as `flake.nix`, create `.sops.yaml` and paste the following below.
```yaml
# This example uses YAML anchors which allows reuse of multiple keys
# without having to repeat yourself.
# Also see https://github.com/Mic92/dotfiles/blob/d6114726d859df36ccaa32891c4963ae5717ef7f/nixos/.sops.yaml
# for a more complex example.
keys:
- &admin_alice 2504791468b153b8a3963cc97ba53d1919c5dfd4
- &admin_bob age12zlz6lvcdk6eqaewfylg35w0syh58sm7gh53q5vvn7hd7c6nngyseftjxl
creation_rules:
- path_regex: secrets/[^/]+\.(yaml|json|env|ini)$
key_groups:
- pgp:
- *admin_alice
age:
- *admin_bob
``` ## Installation
Replace as according to your needs.
5. Create a sops `.yaml` file. 1. Install [Nix](https://nixos.org/download/).
```sh
nix-shell -p sops --run "sops secrets/example.yaml" 2. Ensure Nix is installed properly by running the following (this also gives you `nano` for editing later):
```
NOTE: If you add a new host to your `.sops.yaml`, you will need to update the keys for all secrets. ```sh
```sh nix-shell -p nano
nix-shell -p sops --run "sops updatekeys secrets/example.yaml" ```
```
3. Clone the git repository:
```sh
git clone https://git.sakamoto.dev/kenji/nixos.git ~/.config/nixos && cd ~/.config/nixos/
```
4. Copy `info.default.nix` and rename it to `info.local.nix`:
```sh
cp ~/.config/nixos/info.default.nix ~/.config/nixos/info.local.nix
```
🚨 **CRITICAL STEP:** Edit `info.local.nix`:
```sh
nano ~/.config/nixos/info.local.nix
```
Modify it to fit your system — especially your **username**.
If you accidentally leave the default `biscuit`, that user will be created.
**Login password for `biscuit` is `<PLACEHOLDER>`.**
5. Execute the following command based on your host:
- **MacBook M series:**
```sh
sudo nix run nix-darwin --extra-experimental-features "nix-command flakes" -- switch --flake ~/.config/nixos#macos
```
- **Linux:**
```sh
sudo nixos-rebuild --flake ~/.config/nixos#desktop --impure
sudo nix run home-manager -- init --switch
home-manager switch --flake ~/.config/nixos#desktop --impure
nix-channel --add https://nixos.org/channels/nixos-unstable nixos nix-channel --update
reboot
```
-118
View File
@@ -1,118 +0,0 @@
{
pkgs,
myConfig,
...
}: {
programs.firefox = {
enable = true;
languagePacks = ["en-US"];
profiles = {
hakase = {
search.force = true;
isDefault = true;
search.default = "ddg";
# Full declarative mode enabled.
# Note: Manual bookmarks added in the UI will be overwritten on next rebuild.
bookmarks = {
force = true;
settings = [
{
name = "Toolbar Bookmarks";
toolbar = true;
bookmarks = myConfig.firefox.bookmarks;
}
];
};
settings = {
# --- Privacy & Hardening ---
"browser.contentblocking.category" = "strict";
"privacy.trackingprotection.enabled" = true;
"privacy.resistFingerprinting" = true; # Note: Spoofs timezone and caps FPS to 60
"geo.enabled" = false;
"media.peerconnection.enabled" = false; # Prevents WebRTC IP leaks
"network.dns.disablePrefetch" = true;
"network.prefetch-next" = false;
# --- NixOS / Hyprland Integration ---
"widget.use-xdg-desktop-portal.file-picker" = 1; # Use native file picker
# --- UI & Behavior ---
"browser.compactmode.show" = true;
"browser.tabs.closeWindowWithLastTab" = false;
"extensions.pocket.enabled" = false;
"extensions.screenshots.disabled" = true;
"browser.topsites.contile.enabled" = false;
"browser.formfill.enable" = false;
"browser.search.suggest.enabled" = false;
"browser.search.suggest.enabled.private" = false;
"browser.urlbar.suggest.searches" = false;
"browser.urlbar.showSearchSuggestionsFirst" = false;
"browser.newtabpage.activity-stream.feeds.section.topstories" = false;
"browser.newtabpage.activity-stream.feeds.snippets" = false;
"browser.newtabpage.activity-stream.section.highlights.includePocket" = false;
"browser.newtabpage.activity-stream.section.highlights.includeBookmarks" = false;
"browser.newtabpage.activity-stream.section.highlights.includeDownloads" = false;
"browser.newtabpage.activity-stream.section.highlights.includeVisited" = false;
"browser.newtabpage.activity-stream.showSponsored" = false;
"browser.newtabpage.activity-stream.system.showSponsored" = false;
"browser.newtabpage.activity-stream.showSponsoredTopSites" = false;
# --- Homepage & Navigation ---
"browser.startup.homepage" = "https://dash.sakamoto.dev";
"browser.newtabpage.pinned" = myConfig.firefox.newtabpage;
# --- DNS over HTTPS (Quad9) ---
"network.trr.mode" = 2; # Use DoH with system fallback
"network.trr.uri" = "https://dns.quad9.net/dns-query";
};
};
};
policies = {
DisableTelemetry = true;
DisableFirefoxStudies = true;
EnableTrackingProtection = {
Value = true;
Locked = false;
Cryptomining = true;
Fingerprinting = true;
};
DisablePocket = true;
DisableFirefoxAccounts = true;
DisableAccounts = true;
DisableFirefoxScreenshots = true;
OverrideFirstRunPage = "";
OverridePostUpdatePage = "";
DontCheckDefaultBrowser = true;
DisplayBookmarksToolbar = "always";
SearchBar = "unified";
# Power User Messaging
UserMessaging = {
ExtensionRecommendations = false;
SkipOnboarding = true;
FeatureRecommendations = false;
UrlbarInterventions = false;
WhatsNew = false;
};
ExtensionSettings = {
"uBlock0@raymondhill.net" = {
install_url = "https://addons.mozilla.org/firefox/downloads/latest/ublock-origin/latest.xpi";
installation_mode = "force_installed";
};
"{446900e4-71c2-419f-a6a7-df9c091e268b}" = {
install_url = "https://addons.mozilla.org/firefox/downloads/latest/bitwarden-password-manager/latest.xpi";
installation_mode = "force_installed";
};
"tridactyl.vim@cmcaine.co.uk" = {
install_url = "https://addons.mozilla.org/firefox/downloads/latest/tridactyl-vim/latest.xpi";
installation_mode = "force_installed";
};
};
};
};
}
-5
View File
@@ -1,5 +0,0 @@
{pkgs, ...}: {
home.packages = with pkgs; [
gemini-cli
];
}
-15
View File
@@ -1,15 +0,0 @@
{pkgs, ...}: {
programs.ghostty = {
enable = true;
package =
if pkgs.stdenv.isDarwin
then pkgs.ghostty-bin
else pkgs.ghostty;
enableFishIntegration = true;
settings = {
window-padding-x = 15;
window-padding-y = 15;
window-padding-balance = true;
};
};
}
-10
View File
@@ -1,10 +0,0 @@
{myConfig, ...}: {
programs.git = {
enable = true;
settings = {
user.name = "${myConfig.git.username}";
user.email = "${myConfig.git.email}";
init.defaultBranch = "${myConfig.git.defaultBranch}";
};
};
}
-38
View File
@@ -1,38 +0,0 @@
{
myConfig,
inputs,
pkgs,
...
}: {
programs.hyprland = {
enable = true;
package = inputs.hyprland.packages.${pkgs.stdenv.hostPlatform.system}.hyprland;
portalPackage = inputs.hyprland.packages.${pkgs.stdenv.hostPlatform.system}.xdg-desktop-portal-hyprland;
withUWSM = true;
};
environment.systemPackages = [
pkgs.hyprpicker
pkgs.hyprlock
pkgs.hypridle
pkgs.hyprpaper
pkgs.hyprsunset
pkgs.hyprpolkitagent
];
xdg.terminal-exec = {
enable = true;
settings = {
default = myConfig.terminal.default;
};
};
# systemd.user.services.hyprpolkitagent = {
# description = "Hyprland Polkit Agent";
# wantedBy = ["graphical-session.target"];
# serviceConfig = {
# ExecStart = "${pkgs.hyprpolkitagent}/libexec/hyprpolkitagent";
# Restart = "on-failure";
# };
# };
}
-9
View File
@@ -1,9 +0,0 @@
{
imports = [
./hypr/binds.nix
./hypr/general.nix
./hypr/exec.nix
];
wayland.windowManager.hyprland.enable = true;
wayland.windowManager.hyprland.systemd.enable = false; # for UWSM support...
}
-45
View File
@@ -1,45 +0,0 @@
{
wayland.windowManager.hyprland.settings = {
bindd =
[
# essential
"SUPER, Return, Open Terminal, exec, uwsm app -- xdg-terminal-exec"
"SUPER, Q, Kill active, killactive"
# move focus
"SUPER, J, Move focus down, movefocus, d"
"SUPER, K, Move focus up, movefocus, u"
"SUPER, H, Move focus left, movefocus, l"
"SUPER, L, Move focus right, movefocus, r"
# fullscreen
"SUPER, F, Toggle Fullscreen, fullscreen, 0"
"SUPER SHIFT, F, Toggle Maximized Fullscreen, fullscreen, 1"
# apps
"SUPER, W, Open Browser, exec, uwsm app -- firefox" # FIXME: must be xdg-open
"SUPER, SPACE, App Launcher, exec, uwsm app -- walker"
# [Workspaces] Toggle between most recent workspaces
"SUPER, Tab, Cycle workspaces, workspace, previous"
]
++ (
# Generate binds for Super + [1-10] to switch workspaces
# and Super + Shift + [1-10] to move window to workspace
builtins.concatLists (builtins.genList (
i: let
ws = i + 1;
key = toString (
if ws == 10
then 0
else ws
);
in [
"SUPER, ${key}, Switch to workspace ${toString ws}, workspace, ${toString ws}"
"SUPER SHIFT, ${key}, Move window to workspace ${toString ws}, movetoworkspace, ${toString ws}"
]
)
10)
);
};
}
-7
View File
@@ -1,7 +0,0 @@
{
wayland.windowManager.hyprland.settings = {
exec-once = [
"uwsm app -- waybar"
];
};
}
-9
View File
@@ -1,9 +0,0 @@
{myConfig, ...}: {
wayland.windowManager.hyprland.settings = {
general = {
gaps_in = 5;
gaps_out = 15;
};
monitor = myConfig.hyprland.monitors;
};
}
-11
View File
@@ -1,11 +0,0 @@
{myConfig, ...}: {
services.hyprpaper = {
enable = true;
settings = {
preload = ["/home/${myConfig.nixos.username}/Pictures/Wallpapers/nord-1.png"];
wallpaper = [
"HDMI-A-1,/home/${myConfig.nixos.username}/Pictures/Wallpapers/nord-1.png"
];
};
};
}
-5
View File
@@ -1,5 +0,0 @@
{pkgs, ...}: {
home.packages = with pkgs; [
jellyfin-tui
];
}
-9
View File
@@ -1,9 +0,0 @@
{
inputs,
system,
...
}: {
home.packages = [
inputs.nixovim.packages.${system}.full
];
}
-59
View File
@@ -1,59 +0,0 @@
{
programs.starship = {
enable = true;
settings = {
# Pro layout: one-line, clear spacing
format = ''
[](surface0)$os$directory[](fg:surface0 bg:peach)$git_branch$git_status[](fg:peach bg:surface1)$c$rust$nodejs$python$golang[](fg:surface1 bg:surface0)$nix_shell[](surface0)
$character'';
# Palette definition (Catppuccin Mocha-inspired)
palette = "pro_theme";
palettes.pro_theme = {
surface0 = "#313244";
surface1 = "#45475a";
text = "#cdd6f4";
peach = "#fab387";
sapphire = "#74c7ec";
lavender = "#b4befe";
green = "#a6e3a1";
};
os = {
disabled = false;
format = "[$symbol]($style)";
style = "bg:surface0 fg:text";
symbols = {NixOS = " ";};
};
directory = {
style = "bg:surface0 fg:lavender";
format = "[ $path ]($style)";
truncation_length = 3;
truncation_symbol = "/";
};
git_branch = {
symbol = "󰊢 ";
style = "bg:peach fg:surface0";
format = "[[ $symbol $branch ]($style)]($style)";
};
git_status = {
style = "bg:peach fg:surface0";
format = "[[($all_status$ahead_behind )]($style)]($style)";
};
nix_shell = {
symbol = "󱄅 ";
style = "bg:surface0 fg:sapphire";
format = "[ $symbol $state ]($style)";
};
character = {
success_symbol = "[󱞩](bold green)";
error_symbol = "[󱞩](bold red)";
};
};
};
}
-10
View File
@@ -1,10 +0,0 @@
{inputs, ...}: {
imports = [
inputs.stylix.homeModules.stylix
];
stylix = {
enable = true;
autoEnable = false;
image = ../../assets/Wallpapers/nord-1.png;
};
}
-2
View File
@@ -1,2 +0,0 @@
{
}
-18
View File
@@ -1,18 +0,0 @@
{
services.walker = {
enable = true;
settings = {
app_launch_prefix = "";
as_window = false;
close_when_open = false;
disable_click_to_close = false;
force_keyboard_focus = false;
hotreload_theme = false;
locale = "";
monitor = "";
terminal_title_flag = "";
theme = "default";
timeout = 0;
};
};
}
-7
View File
@@ -1,7 +0,0 @@
{pkgs, ...}: {
home.packages = with pkgs; [
pamixer
wiremix
impala
];
}
-170
View File
@@ -1,170 +0,0 @@
{
config,
pkgs,
...
}: {
imports = [
./style.nix
];
programs.waybar = {
enable = true;
settings = {
mainBar = {
reload_style_on_change = true;
layer = "top";
position = "top";
spacing = 0;
height = 26;
modules-left = ["custom/omarchy" "hyprland/workspaces"];
modules-center = ["clock" "custom/update" "custom/screenrecording-indicator"];
modules-right = [
"group/tray-expander"
"bluetooth"
"network"
"pulseaudio"
"cpu"
"battery"
];
"hyprland/workspaces" = {
on-click = "activate";
format = "{icon}";
format-icons = {
"default" = "";
"1" = "1";
"2" = "2";
"3" = "3";
"4" = "4";
"5" = "5";
"6" = "6";
"7" = "7";
"8" = "8";
"9" = "9";
"10" = "0";
"active" = "󱓻";
};
persistent-workspaces = {
"1" = [];
"2" = [];
"3" = [];
"4" = [];
"5" = [];
};
};
"custom/omarchy" = {
format = "<span font='omarchy'>\ue900</span>";
on-click = "omarchy-menu";
on-click-right = "xdg-terminal-exec";
tooltip-format = "Omarchy Menu\n\nSuper + Alt + Space";
};
"custom/update" = {
format = "";
exec = "omarchy-update-available";
on-click = "omarchy-launch-floating-terminal-with-presentation omarchy-update";
tooltip-format = "Omarchy update available";
signal = 7;
interval = 21600;
};
"cpu" = {
interval = 5;
format = "󰍛";
on-click = "omarchy-launch-or-focus-tui btop";
on-click-right = "alacritty";
};
"clock" = {
format = "{:%H:%M %a %b %d}";
format-alt = "{:L%d %B W%V %Y}";
tooltip = false;
on-click-right = "omarchy-launch-floating-terminal-with-presentation omarchy-tz-select";
};
"network" = {
format-icons = ["󰤯" "󰤟" "󰤢" "󰤥" "󰤨"];
format = "{icon}";
format-wifi = "{icon}";
format-ethernet = "󰀂";
format-disconnected = "󰤮";
tooltip-format-wifi = "{essid} ({frequency} GHz)\n{bandwidthDownBytes} {bandwidthUpBytes}";
tooltip-format-ethernet = "{bandwidthDownBytes} {bandwidthUpBytes}";
tooltip-format-disconnected = "Disconnected";
interval = 3;
spacing = 1;
on-click = "omarchy-launch-wifi";
};
"battery" = {
format = "{capacity}% {icon}";
format-discharging = "{icon}";
format-charging = "{icon}";
format-plugged = "";
format-icons = {
charging = ["󰢜" "󰂆" "󰂇" "󰂈" "󰢝" "󰂉" "󰢞" "󰂊" "󰂋" "󰂅"];
default = ["󰁺" "󰁻" "󰁼" "󰁽" "󰁾" "󰁿" "󰂀" "󰂁" "󰂂" "󰁹"];
};
format-full = "󰂅";
tooltip-format-discharging = "{power:>1.0f}W {capacity}%";
tooltip-format-charging = "{power:>1.0f}W {capacity}%";
interval = 5;
on-click = "omarchy-menu power";
states = {
warning = 20;
critical = 10;
};
};
"bluetooth" = {
format = "";
format-disabled = "󰂲";
format-connected = "󰂱";
format-no-controller = "";
tooltip-format = "Devices connected: {num_connections}";
on-click = "omarchy-launch-bluetooth";
};
"pulseaudio" = {
format = "{icon}";
on-click = "omarchy-launch-or-focus-tui wiremix";
on-click-right = "pamixer -t";
tooltip-format = "Playing at {volume}%";
scroll-step = 5;
format-muted = "";
format-icons = {
default = ["" "" ""];
};
};
"group/tray-expander" = {
orientation = "inherit";
drawer = {
transition-duration = 600;
children-class = "tray-group-item";
};
modules = ["custom/expand-icon" "tray"];
};
"custom/expand-icon" = {
format = "";
tooltip = false;
};
"custom/screenrecording-indicator" = {
on-click = "omarchy-cmd-screenrecord";
# Note: $OMARCHY_PATH must be defined in your environment
exec = "$OMARCHY_PATH/default/waybar/indicators/screen-recording.sh";
signal = 8;
return-type = "json";
};
"tray" = {
icon-size = 12;
spacing = 17;
};
};
};
};
}
-88
View File
@@ -1,88 +0,0 @@
{
programs.waybar = {
style = ''
* {
background-color: #cdd6f4;
color: #181824;
border: none;
border-radius: 0;
min-height: 0;
font-family: 'JetBrainsMono Nerd Font';
font-size: 12px;
}
.modules-left {
margin-left: 8px;
}
.modules-right {
margin-right: 8px;
}
#workspaces button {
all: initial;
padding: 0 6px;
margin: 0 1.5px;
min-width: 9px;
}
#workspaces button.empty {
opacity: 0.5;
}
#cpu,
#battery,
#pulseaudio,
#custom-omarchy,
#custom-screenrecording-indicator,
#custom-update {
min-width: 12px;
margin: 0 7.5px;
}
#tray {
margin-right: 16px;
}
#bluetooth {
margin-right: 17px;
}
#network {
margin-right: 13px;
}
#custom-expand-icon {
margin-right: 18px;
}
tooltip {
padding: 2px;
}
#custom-update {
font-size: 10px;
}
#clock {
margin-left: 8.75px;
}
.hidden {
opacity: 0;
}
#custom-screenrecording-indicator {
min-width: 12px;
margin-left: 8.75px;
font-size: 10px;
}
#custom-screenrecording-indicator.active {
color: #a55555;
}
'';
};
}
-14
View File
@@ -1,14 +0,0 @@
{pkgs, ...}: {
programs.yazi = {
enable = true;
enableFishIntegration = true;
settings = {
manager = {
show_hidden = true;
sort_by = "natural";
sort_dir_first = true;
linemode = "size";
};
};
};
}
-9
View File
@@ -1,9 +0,0 @@
{
programs.zoxide = {
enable = true;
enableFishIntegration = true;
options = [
"--cmd cd"
];
};
}
Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 MiB

@@ -1 +0,0 @@
/nix/store/yckzy9k5i7pvmlk6xjkdj4wwbfms1zpl-home-manager-files/Pictures/Wallpapers/1-Pawel-Czerwinski-Abstract-Purple-Blue.jpg
-1
View File
@@ -1 +0,0 @@
/nix/store/yckzy9k5i7pvmlk6xjkdj4wwbfms1zpl-home-manager-files/Pictures/Wallpapers/1-everforest.jpg
-1
View File
@@ -1 +0,0 @@
/nix/store/yckzy9k5i7pvmlk6xjkdj4wwbfms1zpl-home-manager-files/Pictures/Wallpapers/gruvbox-1.jpg
-1
View File
@@ -1 +0,0 @@
/nix/store/yckzy9k5i7pvmlk6xjkdj4wwbfms1zpl-home-manager-files/Pictures/Wallpapers/kanagawa-1.png
Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.8 KiB

-1
View File
@@ -1 +0,0 @@
/nix/store/yckzy9k5i7pvmlk6xjkdj4wwbfms1zpl-home-manager-files/Pictures/Wallpapers/nord-1.png
Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 246 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 MiB

+76 -49
View File
@@ -1,55 +1,82 @@
{ {
myConfig = { hostname = "hakase";
nixos = { username = "kenji";
username = "kenji"; timezone = "America/Chicago";
hostname = "hakase";
timezone = "America/Chicago";
shell = "fish"; # FIXME: unassigned variable
};
git = {
username = "kenji";
email = "kenji@hakase";
defaultBranch = "master";
};
ssh = {
# FIXME: anonymize
extraConfig = ''
Host macair
User biscuit
HostName 192.168.68.81
Host gitea.sakamoto.dev vpn = {
User kenji vpnEnable = false;
ProxyCommand cloudflared access ssh --hostname %h vpnSecretFile = "/home/kenji/Wireguard/secret";
HostName gitea.sakamoto.dev };
gitProfile = {
user = "biscuit";
email = "biscuit@sakamoto.dev";
defaultBranch = "master";
};
terminal = {
termFont = "JetBrainsMono Nerd Font"; # e.g., JetBrainsMono Nerd Font
termSize = "20";
termShell = "fish";
shellAliases = {
ls = "ls --color=auto";
update = ''
sh -c '
if [ "$(uname)" = "Darwin" ]; then
sudo darwin-rebuild switch --flake ~/.config/nixos#macos
else
sudo nixos-rebuild switch --flake ~/.config/nixos#desktop && home-manager switch --flake ~/.config/nixos#desktop
fi
'
''; '';
}; agu = "pkill gjs & ags run ~/.config/nixos/pkgs/ags/biscuit/app.ts & disown (jobs -p) &";
terminal = {
default = ["ghostty.desktop"];
aliases = {
update = "sudo nixos-rebuild switch --flake ~/.config/nixos-new/#hakase";
};
};
hyprland = {
monitors = ["HDMI-A-1, 1920x1080@120, auto, 1"];
};
firefox = {
bookmarks = [
{
name = "Home Manager";
url = "https://mynixos.com/home-manager/options/programs";
}
{
name = "YouTube";
url = "https://youtube.com";
}
];
newtabpage = [
{
title = "Dashboard";
url = "https://dash.sakamoto.dev";
}
];
}; };
}; };
allowUnfree = true; # allows installation of commercial apps.
touchpadSupport = false;
logitech-hardware = {
enable = true;
};
# Custom Applications
linux-apps = {
gamingDesktop = true; # adds steam
my-apps = pkgs:
with pkgs; [
jellyfin-media-player
mangohud
];
};
hyprconf = {
monitor = [
"DP-1,highres@165,0x1080,auto"
"DP-2,highres@highrr,0x0,auto"
];
};
sshExtraConfig = ''
Host macair
User biscuit
HostName 192.168.68.81
'';
# BUILD (optional), you can remove these blocks.
builder = {
trustedUsers = [
"@groups"
"biscuit"
];
buildMachines = [
{
hostName = "192.168.68.81";
sshUser = "biscuit";
sshKey = "/home/biscuit/.ssh/id_rsa.pub";
system = "x86_64-linux";
supportedFeatures = ["big-parallel" "kvm" "nixos-test"];
}
];
};
} }
Generated
+536 -521
View File
File diff suppressed because it is too large Load Diff
+71 -31
View File
@@ -1,55 +1,95 @@
{ {
description = "Hakase Configuration"; description = "A very basic flake";
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
home-manager = { inputs = {
url = "github:nix-community/home-manager"; nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable";
inputs.nixpkgs.follows = "nixpkgs"; home-manager.url = "github:nix-community/home-manager";
}; home-manager.inputs.nixpkgs.follows = "nixpkgs"; # `follows` ensure it follows nixpkgs versiona. Avoids breaking updates.
hyprland = { darwin.url = "github:lnl7/nix-darwin";
url = "git+https://github.com/hyprwm/Hyprland?submodules=1"; darwin.inputs.nixpkgs.follows = "nixpkgs";
inputs.nixpkgs.follows = "nixpkgs";
}; ags.url = "github:aylur/ags";
nixovim = { ags.inputs.nixpkgs.follows = "nixpkgs";
# FIXME: treesitter does not install automatically (disabled due to read-only problems)
url = "git+https://git.sakamoto.dev/kenji/nixovim.git"; hyprland.url = "github:hyprwm/Hyprland";
inputs.nixpkgs.follows = "nixpkgs"; hyprland.inputs.nixpkgs.follows = "nixpkgs";
};
sops-nix = { unlisted-fonts.url = "git+https://git.sakamoto.dev/kenji/nix-fonts.git";
url = "github:Mic92/sops-nix"; unlisted-fonts.inputs.nixpkgs.follows = "nixpkgs";
inputs.nixpkgs.follows = "nixpkgs";
}; nixvim.url = "github:nix-community/nixvim";
stylix = { nixvim.inputs.nixpkgs.follows = "nixpkgs";
url = "github:nix-community/stylix";
inputs.nixpkgs.follows = "nixpkgs"; nix-neovim.url = "git+https://git.sakamoto.dev/kenji/nix-neovim.git";
}; nix-neovim.inputs.nixpkgs.follows = "nixpkgs";
# kitty-catppuccin.url = "git+https://git.sakamoto.dev/kenji/nix-kitty-catppuccin.git";
# kitty-catppuccin.inputs.nixpkgs.follows = "nixpkgs";
matugen.url = "github:/InioX/Matugen";
matugen.inputs.nixpkgs.follows = "nixpkgs";
}; };
outputs = { outputs = {
self, self,
nixpkgs, nixpkgs,
home-manager, home-manager,
stylix, darwin,
nixovim, # FIXME: should be inside of modules ags,
sops-nix, hyprland,
unlisted-fonts,
nix-neovim,
... ...
} @ inputs: let } @ inputs: let
config = import ./config.nix; config = import ./config.nix;
lib = nixpkgs.lib;
system = "x86_64-linux"; system = "x86_64-linux";
# pkgs = nixpkgs.legacyPackages.${system}; # alternative, without overlays. Unused.
args = args =
{ {
inherit inputs system; inherit inputs system;
} }
// config; // config;
in { in {
# linux only
nixosConfigurations = { nixosConfigurations = {
hakase = nixpkgs.lib.nixosSystem { desktop = lib.nixosSystem {
inherit system;
specialArgs = args; specialArgs = args;
modules = [ modules = [
home-manager.nixosModules.home-manager ./nixos/desktop/configuration.nix
sops-nix.nixosModules.sops ];
./hosts/hakase/configuration.nix };
};
homeConfigurations = {
desktop = home-manager.lib.homeManagerConfiguration {
pkgs = import nixpkgs {
inherit system;
overlays = [
# (final: prev: {
# ags_1 = prev.ags_1.overrideAttrs (old: {
# buildInputs = old.buildInputs ++ [pkgs.libdbusmenu-gtk3];
# });
# })
];
};
extraSpecialArgs = args;
modules = [./home/desktop/home.nix];
};
};
# exclusive to macos M series
darwinConfigurations = {
macos = darwin.lib.darwinSystem {
system = "aarch64-darwin";
specialArgs = args;
modules = [
./nixos/macos/darwin.nix
home-manager.darwinModules.home-manager
{
home-manager.useGlobalPkgs = true;
home-manager.useUserPackages = true;
home-manager.extraSpecialArgs = args;
}
]; ];
}; };
}; };
+20
View File
@@ -0,0 +1,20 @@
{username, ...}: {
imports = [
../../modules/editor.nix
../../modules/desktop/display-manager.nix
../../modules/desktop/misc.nix
../../modules/desktop/app.nix
];
programs.home-manager.enable = true;
home = {
username = "${username}";
homeDirectory = "/home/${username}";
packages = [];
sessionVariables = {};
};
systemd.user.startServices = "sd-switch";
home.stateVersion = "23.05";
}
-12
View File
@@ -1,12 +0,0 @@
{pkgs, ...}: {
imports = [
../modules/home/terminal.nix
../modules/home/apps.nix
../modules/home/apps-optional.nix
../modules/home/hyprland.nix
../modules/home/waybar.nix
../modules/home/theme.nix
];
home.stateVersion = "25.05";
}
+15
View File
@@ -0,0 +1,15 @@
{
config,
pkgs,
inputs,
...
}: {
imports = [
../../modules/editor.nix
];
programs.home-manager.enable = true;
home.packages = [];
home.stateVersion = "23.05";
}
-11
View File
@@ -1,11 +0,0 @@
{
pkgs,
myConfig,
...
}: {
imports = [
./hardware-configuration.nix
../../modules/system/default.nix
../../modules/system/hyprland.nix
];
}
-33
View File
@@ -1,33 +0,0 @@
# Do not modify this file! It was generated by nixos-generate-config
# and may be overwritten by future invocations. Please make changes
# to /etc/nixos/configuration.nix instead.
{ config, lib, pkgs, modulesPath, ... }:
{
imports =
[ (modulesPath + "/installer/scan/not-detected.nix")
];
boot.initrd.availableKernelModules = [ "nvme" "xhci_pci" "ahci" "usbhid" ];
boot.initrd.kernelModules = [ ];
boot.kernelModules = [ "kvm-amd" ];
boot.extraModulePackages = [ ];
fileSystems."/" =
{ device = "/dev/mapper/luks-f8bd85aa-b08e-472a-b7f6-5e190b9b9714";
fsType = "ext4";
};
boot.initrd.luks.devices."luks-f8bd85aa-b08e-472a-b7f6-5e190b9b9714".device = "/dev/disk/by-uuid/f8bd85aa-b08e-472a-b7f6-5e190b9b9714";
fileSystems."/boot" =
{ device = "/dev/disk/by-uuid/72BA-AF9B";
fsType = "vfat";
options = [ "fmask=0077" "dmask=0077" ];
};
swapDevices = [ ];
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
}
+13
View File
@@ -0,0 +1,13 @@
{
linux-apps,
lib,
...
}: {
imports =
[
]
++ lib.optionals (linux-apps.gamingDesktop == true) [
../pkgs/steam/default.nix
../pkgs/heroic/default.nix
];
}
+5
View File
@@ -0,0 +1,5 @@
{pkgs, ...}: let
info = import ../../config.nix;
in {
home.packages = info.linux-apps.my-apps pkgs;
}
+11
View File
@@ -0,0 +1,11 @@
{...}: {
imports = [
../../pkgs/hyprland/default.nix
../../pkgs/ags/default.nix
../../pkgs/swww/default.nix
../../pkgs/waybar/default.nix
../../pkgs/rofi/default.nix
../../pkgs/hypridle/default.nix
../../pkgs/hyprlock/default.nix
];
}
+6
View File
@@ -0,0 +1,6 @@
{...}: {
imports = [
../../pkgs/btop/default.nix
../../pkgs/matugen/default.nix
];
}
+11
View File
@@ -0,0 +1,11 @@
{...}: {
imports = [
../system/desktop/wayland.nix
../system/desktop/sound.nix
../system/desktop/misc.nix
../system/desktop/browser.nix
../system/desktop/font.nix
../system/desktop/theme.nix
../system/desktop/cursor.nix
];
}
+11
View File
@@ -0,0 +1,11 @@
{...}: {
imports = [
../pkgs/fastfetch/default.nix
../pkgs/git/default.nix
../pkgs/kitty/default.nix
../pkgs/neovim/default.nix
../pkgs/fish/default.nix
../pkgs/starship/default.nix
../pkgs/zsh/default.nix
];
}
-5
View File
@@ -1,5 +0,0 @@
{
imports = [
../../apps/jellyfin-tui/home.nix
];
}
-8
View File
@@ -1,8 +0,0 @@
{
imports = [
../../apps/yazi/home.nix
../../apps/gemini/home.nix
../../apps/firefox/home.nix
../../apps/starship/home.nix
];
}
-7
View File
@@ -1,7 +0,0 @@
{
imports = [
../../apps/hyprland/home.nix
../../apps/walker/home.nix
../../apps/hyprpaper/home.nix
];
}
-9
View File
@@ -1,9 +0,0 @@
{
imports = [
../../apps/neovim/neovim.nix
../../apps/git/home.nix
../../apps/zoxide/home.nix
../../apps/fish/home.nix
../../apps/ghostty/home.nix
];
}
-5
View File
@@ -1,5 +0,0 @@
{
imports = [
../../apps/stylix/home.nix
];
}
-6
View File
@@ -1,6 +0,0 @@
{
imports = [
../../apps/waybar/home.nix
../../apps/waybar/deps.nix
];
}
+14
View File
@@ -0,0 +1,14 @@
{
vpn,
lib,
...
}: {
imports =
[
../system/default.nix
../system/users.nix
]
++ lib.optionals (vpn.vpnEnable == true) [
../system/vpn.nix
];
}
-21
View File
@@ -1,21 +0,0 @@
{pkgs, ...}: {
imports = [
../../system/time.nix
../../system/boot.nix
../../system/amd.nix
../../system/hardware.nix
../../system/home-manager.nix
../../system/services.nix
../../system/user.nix
../../system/version.nix
../../system/fonts.nix
../../system/programs.nix
../../system/security.nix
../../system/variables.nix
];
environment.systemPackages = with pkgs; [
# FIXME: must be on their own app
git
cloudflared
];
}
-5
View File
@@ -1,5 +0,0 @@
{
imports = [
../../apps/hyprland/default.nix
];
}
+35
View File
@@ -0,0 +1,35 @@
{
pkgs,
allowUnfree,
builder,
sshExtraConfig,
...
}: {
imports = [
# Include the results of the hardware scan.
/etc/nixos/hardware-configuration.nix
../../modules/system.nix
../../modules/display-manager.nix
../../modules/app.nix
];
environment.systemPackages = with pkgs; [
vim
wget
];
nixpkgs.config.allowUnfree = allowUnfree;
nix.settings = {
trusted-users = builder.trustedUsers;
experimental-features = ["nix-command" "flakes"];
};
programs.ssh.extraConfig = sshExtraConfig;
nix.distributedBuilds = true;
nix.settings.builders-use-substitutes = true;
# nix.buildMachines = builder.buildMachines;
system.stateVersion = "25.05";
}
+48
View File
@@ -0,0 +1,48 @@
# Do not modify this file! It was generated by nixos-generate-config
# and may be overwritten by future invocations. Please make changes
# to /etc/nixos/configuration.nix instead.
{ config, lib, pkgs, modulesPath, ... }:
{
imports =
[ (modulesPath + "/installer/scan/not-detected.nix")
];
boot.initrd.availableKernelModules = [ "nvme" "xhci_pci" "ahci" "usbhid" "sd_mod" ];
boot.initrd.kernelModules = [ ];
boot.kernelModules = [ "kvm-amd" ];
boot.extraModulePackages = [ ];
fileSystems."/" =
{ device = "/dev/disk/by-uuid/3f2c4a5a-3124-462a-9fb9-cccc933bac63";
fsType = "btrfs";
options = [ "subvol=@" ];
};
fileSystems."/boot" =
{ device = "/dev/disk/by-uuid/18F8-7DC1";
fsType = "vfat";
options = [ "fmask=0077" "dmask=0077" ];
};
fileSystems."/mnt/CRUCIAL" =
{ device = "/dev/disk/by-uuid/394f67b9-e75b-40cc-9b15-28bbda40fff4";
fsType = "ext4";
};
swapDevices =
[ { device = "/dev/disk/by-uuid/bbe1e281-4b1d-4d85-ba6a-6f5265f0e3a3"; }
];
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
# (the default) this is the recommended approach. When using systemd-networkd it's
# still possible to use this option, but it's recommended to use it in conjunction
# with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
networking.useDHCP = lib.mkDefault true;
# networking.interfaces.biscuit-default.useDHCP = lib.mkDefault true;
# networking.interfaces.enp11s0.useDHCP = lib.mkDefault true;
# networking.interfaces.wlp10s0.useDHCP = lib.mkDefault true;
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
}
+40
View File
@@ -0,0 +1,40 @@
{
pkgs,
builder,
terminal,
username,
...
}: {
# List packages installed in system profile. To search by name, run:
# $ nix-env -qaP | grep wget
environment.systemPackages = with pkgs; [
python313
];
# Auto upgrade nix package and the daemon service.
# services.nix-daemon.enable = true;
# services.karabiner-elements.enable = true;
# nix.package = pkgs.nix;
# Necessary for using flakes on this system.
nix.settings.experimental-features = "nix-command flakes";
nix.settings.trusted-users = builder.trustedUsers;
# Create /etc/zshrc that loads the nix-darwin environment.
programs.zsh.enable = true; # default shell on catalina
programs.fish.enable = true;
# $ darwin-rebuild changelog
system.stateVersion = 5;
# The platform the configuration will be used on.
nixpkgs.hostPlatform = "aarch64-darwin";
users.users.${username} = {
name = "${username}";
home = "/Users/${username}";
shell = pkgs.${terminal.termShell};
};
home-manager.users.${username} = import ../../home/macos/home.nix;
}
+2
View File
@@ -0,0 +1,2 @@
node_modules/
@girs/
+17
View File
@@ -0,0 +1,17 @@
import { App } from "astal/gtk3"
import style from "./style.scss"
import Bar from "./widget/Bar"
App.start({
css: style,
instanceName: "js",
requestHandler(request, res) {
print(request)
res("ok")
},
main: () => {
const monitors = App.get_monitors()
const primary = monitors.find(m => m.primary) || monitors[0]
return Bar(primary)
}
})
+3
View File
@@ -0,0 +1,3 @@
$background: #131318;
$foreground: #e4e1e9;
$primary: #bec2ff;
+21
View File
@@ -0,0 +1,21 @@
declare const SRC: string
declare module "inline:*" {
const content: string
export default content
}
declare module "*.scss" {
const content: string
export default content
}
declare module "*.blp" {
const content: string
export default content
}
declare module "*.css" {
const content: string
export default content
}
+6
View File
@@ -0,0 +1,6 @@
{
"name": "astal-shell",
"dependencies": {
"astal": "/home/biscuit/.local/share/ags"
}
}
+143
View File
@@ -0,0 +1,143 @@
@use "sass:color";
@use "./colors" as *;
// default
// $bg: #212223;
// $fg: #f1f1f1;
// $accent: #378DF7;
// $radius: 7px;
// Kanagawa Theme
// $bg: #1F1F28;
// $fg: #DCD7BA;
// $accent: #C0A36E;
// $radius: 7px;
// mstcl
// $bg: #121212;
// $fg: #f1f1f1;
// $accent: #C0A36E;
// $radius: 7px;
$bg: $background;
$fg: $foreground;
$accent: $primary;
$radius: 7px;
window.Bar {
border: none;
box-shadow: none;
background-color: $bg;
color: $fg;
font-size: 1.1em;
font-weight: bold;
font-family: "JetBrainsMono Nerd Font";
label {
margin: 0 8px;
}
.Workspaces {
button {
all: unset;
background-color: transparent;
&:hover label {
background-color: color.adjust($fg, $alpha: -0.84);
border-color: color.adjust($accent, $alpha: -0.8);
}
&:active label {
background-color: color.adjust($fg, $alpha: -0.8)
}
}
label {
transition: 200ms;
padding: 0 8px;
margin: 2px;
border-radius: $radius;
border: 1pt solid transparent;
}
.focused label {
color: $accent;
border-color: $accent;
}
}
.SysTray {
margin-right: 8px;
button {
padding: 0 4px;
}
}
.Time {
.TimeHM {
font-weight: bold;
color: $accent;
}
.TimeDate {
// color: color.adjust($fg, $lightness: -10%);
color: $fg;
opacity: 0.85;
font-weight: normal;
}
}
.FocusedClient {
color: color.adjust($fg, $lightness: -30%);
opacity: 0.7;
}
.Media .Cover {
min-height: 1.2em;
min-width: 1.2em;
border-radius: $radius;
background-position: center;
background-size: contain;
}
.Battery label {
padding-left: 0;
margin-left: 0;
}
.AudioSlider {
* {
all: unset;
}
icon {
margin-right: .6em;
}
& {
margin: 0 1em;
}
trough {
background-color: color.adjust($fg, $alpha: -0.8);
border-radius: $radius;
}
highlight {
background-color: $accent;
min-height: .8em;
border-radius: $radius;
}
slider {
background-color: $fg;
border-radius: $radius;
min-height: 1em;
min-width: 1em;
margin: -.2em;
}
}
}
+14
View File
@@ -0,0 +1,14 @@
{
"$schema": "https://json.schemastore.org/tsconfig",
"compilerOptions": {
"experimentalDecorators": true,
"strict": true,
"target": "ES2022",
"module": "ES2022",
"moduleResolution": "Bundler",
// "checkJs": true,
// "allowJs": true,
"jsx": "react-jsx",
"jsxImportSource": "astal/gtk3",
}
}
+189
View File
@@ -0,0 +1,189 @@
import { App } from "astal/gtk3"
import { Variable, GLib, bind } from "astal"
import { Astal, Gtk, Gdk } from "astal/gtk3"
import Hyprland from "gi://AstalHyprland"
import Mpris from "gi://AstalMpris"
import Battery from "gi://AstalBattery"
import Wp from "gi://AstalWp"
import Network from "gi://AstalNetwork"
import Tray from "gi://AstalTray"
function SysTray() {
const tray = Tray.get_default()
return <box className="SysTray">
{bind(tray, "items").as(items => items.map(item => (
<menubutton
tooltipMarkup={bind(item, "tooltipMarkup")}
usePopover={false}
actionGroup={bind(item, "actionGroup").as(ag => ["dbusmenu", ag])}
menuModel={bind(item, "menuModel")}>
<icon gicon={bind(item, "gicon")} />
</menubutton>
)))}
</box>
}
function Wifi() {
const network = Network.get_default()
const wifi = bind(network, "wifi")
return <box visible={wifi.as(Boolean)}>
{wifi.as(wifi => wifi && (
<icon
tooltipText={bind(wifi, "ssid").as(String)}
className="Wifi"
icon={bind(wifi, "iconName")}
/>
))}
</box>
}
function AudioSlider() {
const speaker = Wp.get_default()?.audio.defaultSpeaker!
return <box className="AudioSlider" css="min-width: 140px">
<icon icon={bind(speaker, "volumeIcon")} />
<slider
hexpand
onDragged={({ value }) => speaker.volume = value}
value={bind(speaker, "volume")}
/>
</box>
}
function BatteryLevel() {
const bat = Battery.get_default()
return <box className="Battery"
visible={bind(bat, "isPresent")}>
<icon icon={bind(bat, "batteryIconName")} />
<label label={bind(bat, "percentage").as(p =>
`${Math.floor(p * 100)} %`
)} />
</box>
}
function Media() {
const mpris = Mpris.get_default()
return <box className="Media">
{bind(mpris, "players").as(ps => ps[0] ? (
<box>
<box
className="Cover"
valign={Gtk.Align.CENTER}
css={bind(ps[0], "coverArt").as(cover =>
`background-image: url('${cover}');`
)}
/>
<label
label={bind(ps[0], "metadata").as(() =>
`${ps[0].title} - ${ps[0].artist}`
)}
/>
</box>
) : (
<label label="Biscuit" />
))}
</box>
}
function Workspaces() {
const hypr = Hyprland.get_default();
return (
<box className="Workspaces">
{bind(hypr, "focusedWorkspace").as((fw) => {
if (!fw) return null;
// Determine the current chunk of 5 visible workspace buttons
const currentChunkStart = Math.floor((fw.id - 1) / 5) * 5 + 1;
const visibleIds = Array.from({ length: 5 }, (_, i) => currentChunkStart + i);
return visibleIds.map((id) => {
// Try to get the real workspace, fall back to a dummy one if it doesn't exist
const ws =
hypr.workspaces.find((w) => w.id === id) ??
Hyprland.Workspace.dummy(id, null);
return (
<button
className={fw.id === id ? "focused" : ""}
onClick={() => ws.focus()}
>
{id}
</button>
);
});
})}
</box>
);
}
function FocusedClient() {
const hypr = Hyprland.get_default();
const focused = bind(hypr, "focusedClient");
return (
<box className="FocusedClient" visible={focused.as(Boolean)}>
{focused.as(client => {
if (!client) return null;
return (
<label
label={bind(client, "title").as(title => {
return title.length > 40
? title.slice(0, 37) + "..."
: title;
})}
/>
);
})}
</box>
);
}
function Time({ format = "%H:%M|%a %b %d" }) {
const time = Variable<string>("").poll(1000, () =>
GLib.DateTime.new_now_local().format(format)!
);
return bind(time).as(str => {
const [hm, date] = str.split("|");
return (
<box className="Time">
<label className="TimeHM" label={hm} />
<label className="TimeDate" label={date} />
</box>
);
});
}
export default function Bar(monitor: Gdk.Monitor) {
const { TOP, LEFT, RIGHT } = Astal.WindowAnchor
return <window
className="Bar"
gdkmonitor={monitor}
exclusivity={Astal.Exclusivity.EXCLUSIVE}
anchor={TOP | LEFT | RIGHT}>
<centerbox>
<box hexpand halign={Gtk.Align.START}>
<Workspaces />
<FocusedClient />
</box>
<box>
<Time />
</box>
<box hexpand halign={Gtk.Align.END} >
<SysTray />
<Wifi />
<AudioSlider />
<BatteryLevel />
</box>
</centerbox>
</window>
}
+28
View File
@@ -0,0 +1,28 @@
{
inputs,
pkgs,
system,
...
}: {
imports = [inputs.ags.homeManagerModules.default];
programs.ags = {
enable = true;
configDir = ./biscuit;
extraPackages = let
agsPkgs = inputs.ags.packages.${system};
in
with pkgs; [
agsPkgs.battery
agsPkgs.hyprland
agsPkgs.mpris
agsPkgs.wireplumber
agsPkgs.notifd
agsPkgs.apps
agsPkgs.network
agsPkgs.tray
fzf
];
};
}
+8
View File
@@ -0,0 +1,8 @@
{...}: {
programs.btop = {
enable = true;
settings = {
vim_keys = true;
};
};
}
+131
View File
@@ -0,0 +1,131 @@
{
programs.fastfetch = {
enable = true;
settings = {
logo = {
padding = {
top = 2;
left = 1;
right = 2;
};
};
display = {
separator = " ";
};
modules = [
# Title
{
type = "title";
format = "{#1} {#}{user-name-colored}";
}
# System Information Header
{
type = "custom";
format = "{#1} {#}System Information";
}
{
type = "os";
key = " {#keys}󰍹 OS";
}
{
type = "kernel";
key = " {#keys}󰒋 Kernel";
}
{
type = "uptime";
key = " {#keys}󰅐 Uptime";
}
{
type = "packages";
key = " {#keys}󰏖 Packages";
format = "{all}";
}
{
type = "custom";
format = "{#1}";
}
# Desktop Environment
{
type = "custom";
format = "{#1} {#}Desktop Environment";
}
{
type = "de";
key = " {#keys}󰧨 DE";
}
{
type = "wm";
key = " {#keys}󱂬 WM";
}
{
type = "wmtheme";
key = " {#keys}󰉼 Theme";
}
{
type = "display";
key = " {#keys}󰹑 Resolution";
}
{
type = "shell";
key = " {#keys}󰞷 Shell";
}
{
type = "terminalfont";
key = " {#keys}󰛖 Font";
}
{
type = "custom";
format = "{#1}";
}
# Hardware Information
{
type = "custom";
format = "{#1} {#}Hardware Information";
}
{
type = "cpu";
key = " {#keys}󰻠 CPU";
}
{
type = "gpu";
key = " {#keys}󰢮 GPU";
}
{
type = "memory";
key = " {#keys}󰍛 Memory";
}
{
type = "disk";
key = " {#keys}󰋊 Disk (/)";
folders = "/";
}
{
type = "custom";
format = "{#1}";
}
# Colors
{
type = "colors";
key = "";
symbol = "circle";
}
# Footer
{
type = "custom";
format = "{#1}";
}
];
};
};
}
+4 -3
View File
@@ -1,17 +1,18 @@
{ {
pkgs, pkgs,
myConfig, terminal,
... ...
}: { }: {
programs.zoxide.enable = true;
programs.fish = { programs.fish = {
enable = true; enable = true;
interactiveShellInit = '' interactiveShellInit = ''
set fish_greeting set fish_greeting
fish_vi_key_bindings fish_vi_key_bindings
zoxide init fish | source zoxide init fish | source
zoxide init fish --cmd cd | source
''; '';
shellAliases = myConfig.terminal.aliases; shellAliases = terminal.shellAliases;
plugins = with pkgs.fishPlugins; [ plugins = with pkgs.fishPlugins; [
]; ];
+10
View File
@@ -0,0 +1,10 @@
{gitProfile, ...}: {
programs.git = {
enable = true;
extraConfig = {
user.name = "${gitProfile.user}";
user.email = "${gitProfile.email}";
init.defaultBranch = "${gitProfile.defaultBranch}";
};
};
}
+5
View File
@@ -0,0 +1,5 @@
{pkgs, ...}: {
environment.systemPackages = with pkgs; [
heroic
];
}
+38
View File
@@ -0,0 +1,38 @@
{...}: {
services.hypridle = {
enable = true;
settings = {
general = {
lock_cmd = "pidof hyprlock || hyprlock"; # avoid starting multiple hyprlock instances.
before_sleep_cmd = "loginctl lock-session"; # lock before suspend.
after_sleep_cmd = "hyprctl dispatch dpms on && agu"; # avoid needing to press a key twice to turn on the display.
};
listener = [
{
timeout = 150;
on-timeout = "brightnessctl -s set 10"; # set monitor backlight to minimum, avoid 0 on OLED monitor.
on-resume = "brightnessctl -r"; # restore monitor backlight.
}
{
timeout = 150;
on-timeout = "brightnessctl -sd rgb:kbd_backlight set 0"; # turn off keyboard backlight.
on-resume = "brightnessctl -rd rgb:kbd_backlight"; # turn on keyboard backlight.
}
{
timeout = 300;
on-timeout = "loginctl lock-session"; # lock screen when timeout has passed.
}
{
timeout = 330;
on-timeout = "hyprctl dispatch dpms off"; # screen off after 5.5min.
on-resume = "hyprctl dispatch dpms on && brightnessctl -r"; # screen on and restore brightness on resume.
}
{
timeout = 500;
on-timeout = "systemctl suspend"; # suspend PC after 30min.
}
];
};
};
}
+226
View File
@@ -0,0 +1,226 @@
{
hyprconf,
username,
terminal,
...
}: {
wayland.windowManager.hyprland = {
enable = true;
xwayland.enable = true;
settings = {
"$mod" = "SUPER";
"$term" = "kitty --single-instance";
"$browser" = "firefox";
monitor = hyprconf.monitor;
exec-once = [
"[workspace 20 silent] kitty --single-insance --hold fastfetch"
"[workspace 20 silent] firefox"
"[workspace 1] kitty --single-instance --hold fastfetch"
"pkill gjs & ags run"
# "matugen image /home/${username}/.config/nixos/assets/wallpapers/ultrawide-nixos-default.png"
"hyprctl setcursor Bibata-Original-Classic 24"
"solaar -w hide"
];
general = {
gaps_in = 2;
gaps_out = 5;
border_size = 2;
# col.active_border = "#0DB7D4FF";
# col.inactive_border = "#31313600";
# col = {
# "inactive_border" = "rgba(595959aa)";
# "active_border" = "rgba(33ccffee) rgba(00ff99ee) 45deg";
# };
resize_on_border = false;
allow_tearing = false;
layout = "dwindle";
};
decoration = {
rounding = 0;
rounding_power = 2;
active_opacity = 1.0;
inactive_opacity = 1.0;
dim_inactive = true;
dim_strength = 0.1;
dim_special = 0.8;
shadow = {
enabled = true;
range = 4;
render_power = 3;
color = "rgba(1a1a1aee)";
};
blur = {
enabled = true;
size = 3;
passes = 1;
vibrancy = 0.1696;
};
};
animations = {
enabled = true;
bezier = [
"linear, 0, 0, 1, 1"
"md3_standard, 0.2, 0, 0, 1"
"md3_decel, 0.05, 0.7, 0.1, 1"
"md3_accel, 0.3, 0, 0.8, 0.15"
"overshot, 0.05, 0.9, 0.1, 1.1"
"crazyshot, 0.1, 1.5, 0.76, 0.92"
"hyprnostretch, 0.05, 0.9, 0.1, 1.0"
"menu_decel, 0.1, 1, 0, 1"
"menu_accel, 0.38, 0.04, 1, 0.07"
"easeInOutCirc, 0.85, 0, 0.15, 1"
"easeOutCirc, 0, 0.55, 0.45, 1"
"easeOutExpo, 0.16, 1, 0.3, 1"
"softAcDecel, 0.26, 0.26, 0.15, 1"
"md2, 0.4, 0, 0.2, 1"
];
animation = [
"windows, 1, 3, md3_decel, popin 60%"
"windowsIn, 1, 3, md3_decel, popin 60%"
"windowsOut, 1, 3, md3_accel, popin 60%"
"border, 1, 10, default"
"fade, 1, 3, md3_decel"
"layersIn, 1, 3, menu_decel, slide"
"layersOut, 1, 1.6, menu_accel"
"fadeLayersIn, 1, 2, menu_decel"
"fadeLayersOut, 1, 0.5, menu_accel"
"workspaces, 1, 7, menu_decel, slide"
"specialWorkspace, 1, 3, md3_decel, slidevert"
];
};
dwindle = {
pseudotile = true;
preserve_split = true;
};
master = {
new_status = "master";
};
misc = {
force_default_wallpaper = -1;
disable_hyprland_logo = true;
};
input = {
kb_layout = "us";
follow_mouse = 1;
sensitivity = 0;
force_no_accel = true;
repeat_delay = 250;
repeat_rate = 35;
touchpad = {
natural_scroll = false;
};
numlock_by_default = true;
};
gestures = {
workspace_swipe = false;
};
binds = {
workspace_back_and_forth = true;
scroll_event_delay = 0;
};
device = [
{
name = "epic-mouse-v1";
sensitivity = -0.5;
}
];
bind =
[
"$mod, Return, exec, $term"
"$mod, Q, killactive,"
"$mod, M, exit,"
"$mod, E, exec, $fileManager"
"$mod, V, togglefloating,"
"$mod, R, exec, $menu"
"$mod, P, pseudo,"
"$mod, B, togglesplit,"
"$mod, W, exec, $browser"
"$mod, H, movefocus, l"
"$mod, L, movefocus, r"
"$mod, K, movefocus, u"
"$mod, J, movefocus, d"
"$mod SHIFT, K, movewindow, u"
"$mod SHIFT, J, movewindow, d"
"$mod SHIFT, H, movewindow, l"
"$mod SHIFT, L, movewindow, r"
"$mod CTRL, K, resizeactive, 0 -50"
"$mod CTRL, J, resizeactive, 0 50"
"$mod CTRL, H, resizeactive, -50 0"
"$mod CTRL, L, resizeactive, 50 0"
"$mod, S, togglespecialworkspace, magic"
"$mod SHIFT, S, movetoworkspace, special:magic"
"$mod, mouse_down, workspace, e+1"
"$mod, mouse_up, workspace, e-1"
"$mod, F, fullscreen, 0"
"$mod, Space, exec, pkill rofi || rofi -show drun"
"$mod, C, exec, pkill rofi || rofi -show calc -modi calc -no-show-match -no-sort"
]
++ (
# workspaces
builtins.concatLists (builtins.genList (
i: let
ws = i + 1;
in [
"$mod, ${toString ws}, workspace, ${toString ws}"
"$mod SHIFT, ${toString ws}, movetoworkspace, ${toString ws}"
]
)
9)
)
++ [
"$mod, 0, workspace, 10"
"$mod, 0, movetoworkspace, 10"
];
bindm = [
"$mod, mouse:272, movewindow"
"$mod, mouse:273, resizewindow"
];
bindel = [
",XF86AudioRaiseVolume, exec, wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ 5%+"
",XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-"
",XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"
",XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle"
",XF86MonBrightnessUp, exec, brightnessctl s 10%+"
",XF86MonBrightnessDown, exec, brightnessctl s 10%-"
];
bindl = [
",XF86AudioNext, exec, playerctl next"
",XF86AudioPause, exec, playerctl play-pause"
",XF86AudioPlay, exec, playerctl play-pause"
",XF86AudioPrev, exec, playerctl previous"
];
env = [
"HYPRCURSOR_THEME, Bibata-Original-Classic"
"HYPRCURSOR_SIZE, 24"
];
};
};
}
+7
View File
@@ -0,0 +1,7 @@
{...}: {
programs.hyprlock = {
enable = true;
settings = {
};
};
}
+24
View File
@@ -0,0 +1,24 @@
{terminal, ...}: {
programs.kitty = {
enable = true;
themeFile = "kanagawa";
settings = {
confirm_os_window_close = 0;
window_padding_width = 10;
font_size = terminal.termSize;
font_family = terminal.termFont;
bold_font = "auto";
italic_font = "auto";
bold_italic_font = "auto";
# optimization
input_delay = 0;
repaint_delay = 2;
sync_to_monitor = false;
wayland_enable_ime = false;
allow_remote_control = true;
};
extraConfig = "include colors.conf";
};
}
+70
View File
@@ -0,0 +1,70 @@
[config]
# If set to enabled, it will check for updates when you run the matugen command, notifying you that an update is avaiable.
# WARNING: Matugen needs to be compiled with the `update-informer` feature for this to work.
version_check = false
[config.wallpaper]
# The base command to run for applying the wallpaper, shouldn't have spaces in it.
command = "swww"
# The arguments that will be provided to the command.
# Keywords like {{ mode }} or anything that works inside of hooks doesn't work here.
# The last argument will be the image path.
arguments = ["img", "--transition-type", "center", "--transition-fps", "120"]
# For example, killing the wallpaper daemon. Usage is like a normal hook.
# pre_hook = ""
[config.custom_keywords]
test = "aaaa"
[templates.name1]
# Relative paths will be resolved from the path `config.toml` is in.
input_path = "./colors.whatever-extension"
output_path = "./a/colors-generated.whatever-extension"
# This will use a different input path depending on what mode you use.
# input_path_modes = { dark = "./colors.whatever-extension", light = "./colors.whatever-extension" }
# This will compare all of the colors inside the array with the color you set as `compare_to`, and returns the closest color to it.
# You can then use `{{closest_color}}` inside templates and hooks.
colors_to_compare = [
{ name = "black", color = "#000000" },
{ name = "red", color = "#ff0000" },
{ name = "maroon", color = "#800000" },
{ name = "yellow", color = "#ffff00" },
{ name = "olive", color = "#808000" },
{ name = "lime", color = "#00ff00" },
{ name = "green", color = "#008000" },
{ name = "aqua", color = "#00ffff" },
{ name = "teal", color = "#008080" },
{ name = "blue", color = "#0000ff" },
{ name = "navy", color = "#000080" },
{ name = "fuchsia", color = "#ff00ff" },
{ name = "purple", color = "#800080" },
]
compare_to = "{{colors.primary.default.hex}}"
# Runs before the template is exported. You can use keywords here,
pre_hook = 'echo "source color {{colors.source_color.default.hex}}, source image {{image}}, closest color {{closest_color}}"'
# Runs after the template is exported. You can use keywords here.
post_hook = 'echo "after gen"'
# Only hex values
# https://m3.material.io/styles/color/advanced/adjust-existing-colors#1cc12e43-237b-45b9-8fe0-9a3549c1f61e
# Blend is set to true by default.
[config.custom_colors]
green = "#00ff00"
red = "#ff0000"
blue = { color = "#0000ff", blend = false }
### --- my config
[templates.kitty]
input_path = '~/.config/nixos/pkgs/matugen/custom/templates/kitty.conf'
output_path = '~/.config/kitty/colors.conf'
post_hook = "kitty @ set-colors -a -c ~/.config/kitty/colors.conf"
[templates.ags]
input_path = '~/.config/nixos/pkgs/matugen/custom/templates/ags.scss'
output_path = '~/.config/nixos/pkgs/ags/biscuit/colors.scss'
post_hook = "pkill gjs & ags run ~/.config/nixos/pkgs/ags/biscuit/app.ts & disown (jobs -p) &"
+3
View File
@@ -0,0 +1,3 @@
$background: {{colors.surface.dark.hex}};
$foreground: {{colors.on_surface.dark.hex}};
$primary: {{colors.primary.dark.hex}};
+41
View File
@@ -0,0 +1,41 @@
cursor {{colors.on_surface.default.hex}}
cursor_text_color {{colors.on_surface_variant.default.hex}}
foreground {{colors.on_surface.default.hex}}
background {{colors.surface.default.hex}}
selection_foreground {{colors.on_secondary.default.hex}}
selection_background {{colors.secondary_fixed_dim.default.hex}}
url_color {{colors.primary.default.hex}}
# black
color8 #262626
color0 #4c4c4c
# red
color1 #ac8a8c
color9 #c49ea0
# green
color2 #8aac8b
color10 #9ec49f
# yellow
color3 #aca98a
color11 #c4c19e
# blue
/* color4 #8f8aac */
color4 {{colors.primary.default.hex}}
color12 #a39ec4
# magenta
color5 #ac8aac
color13 #c49ec4
# cyan
color6 #8aacab
color14 #9ec3c4
# white
color15 #e7e7e7
color7 #f0f0f0
+11
View File
@@ -0,0 +1,11 @@
{
pkgs,
inputs,
system,
...
}: {
imports = [inputs.matugen.nixosModules.default];
home.file.".config/matugen/config.toml" = {
source = builtins.toPath ./custom/config.toml;
};
}
+174
View File
@@ -0,0 +1,174 @@
{
plugins = {
alpha = {
enable = true;
layout = [
{
type = "padding";
val = 2;
}
{
type = "text";
val = [
" "
" "
" "
" "
" "
" "
" "
" "
" "
" "
" "
" "
" "
" "
" "
" "
" "
" "
];
opts = {
position = "center";
hl = "Type";
};
}
{
type = "padding";
val = 4;
}
{
type = "group";
val = [
{
type = "button";
val = " New File ";
on_press.__raw = "function() vim.cmd[[ene]] end";
opts = {
shortcut = "n";
keymap = [
"n"
"n"
"<cmd>ene<CR>"
{
noremap = true;
silent = true;
nowait = true;
}
];
position = "center";
width = 50;
align_shortcut = "right";
hl_shortcut = "Keyword";
};
}
{
type = "padding";
val = 2;
}
{
type = "button";
val = " Find File ";
opts = {
shortcut = "f";
keymap = [
"n"
"f"
"<cmd>lua require('fzf-lua').files({ cwd = vim.loop.cwd() })<CR>"
{
noremap = true;
silent = true;
nowait = true;
}
];
position = "center";
width = 50;
align_shortcut = "right";
hl_shortcut = "Keyword";
};
}
{
type = "padding";
val = 2;
}
{
type = "button";
val = " Recent Files ";
on_press.__raw = "function() require('telescope.builtin').oldfiles() end";
opts = {
shortcut = "r";
keymap = [
"n"
"r"
"<cmd>lua require('fzf-lua').oldfiles({ cwd = vim.loop.cwd() })<CR>"
{
noremap = true;
silent = true;
nowait = true;
}
];
position = "center";
width = 50;
align_shortcut = "right";
hl_shortcut = "Keyword";
};
}
{
type = "padding";
val = 2;
}
{
type = "button";
val = " Find Text ";
on_press.__raw = "function() require('telescope.builtin').live_grep() end";
opts = {
shortcut = "g";
keymap = [
"n"
"g"
"<cmd>lua require('fzf-lua').live_grep()<CR>"
{
noremap = true;
silent = true;
nowait = true;
}
];
position = "center";
width = 50;
align_shortcut = "right";
hl_shortcut = "Keyword";
};
}
{
type = "padding";
val = 2;
}
{
type = "button";
val = " Quit Neovim ";
on_press.__raw = "function() vim.cmd[[qa]] end";
opts = {
shortcut = "q";
keymap = [
"n"
"q"
"<cmd>qa<CR>"
{
noremap = true;
silent = true;
nowait = true;
}
];
position = "center";
width = 50;
align_shortcut = "right";
hl_shortcut = "Keyword";
};
}
];
}
];
};
};
}
+18
View File
@@ -0,0 +1,18 @@
{
config,
lib,
pkgs,
...
}: {
# `plugins.mini.enable` with `plugins.mini.modules.icons` and `plugins.mini.mockDevIcons`.
# plugins.web-devicons.enable = true;
plugins.mini = {
enable = true;
mockDevIcons = true;
modules = [
];
};
plugins.telescope = {
enable = true;
};
}
+14
View File
@@ -0,0 +1,14 @@
{
pkgs,
inputs,
...
}: let
nix-neovim = inputs.nix-neovim.packages.${pkgs.system}.default;
in {
programs.neovim.enable = false;
home.packages = [
nix-neovim
pkgs.lazygit
# ripgrep
];
}
+8
View File
@@ -0,0 +1,8 @@
{pkgs, ...}: {
programs.rofi = {
enable = true;
plugins = with pkgs; [
rofi-calc
];
};
}
+16
View File
@@ -0,0 +1,16 @@
/**
*
* Author : Aditya Shakya (adi1090x)
* Github : @adi1090x
*
* Colors
**/
* {
background: #1E2127FF;
background-alt: #282B31FF;
foreground: #FFFFFFFF;
selected: #61AFEFFF;
active: #98C379FF;
urgent: #E06C75FF;
}
+171
View File
@@ -0,0 +1,171 @@
/**
*
* Author : Aditya Shakya (adi1090x)
* Github : @adi1090x
*
* Rofi Theme File
* Rofi Version: 1.7.3
**/
/*****----- Configuration -----*****/
configuration {
modi: "drun";
show-icons: true;
display-drun: "";
drun-display-format: "{name}";
}
/*****----- Global Properties -----*****/
@import "shared/colors.rasi"
@import "shared/fonts.rasi"
/*****----- Main Window -----*****/
window {
transparency: "real";
location: center;
anchor: center;
fullscreen: false;
width: 400px;
x-offset: 0px;
y-offset: 0px;
enabled: true;
margin: 0px;
padding: 0px;
border: 0px solid;
border-radius: 12px;
border-color: @selected;
background-color: @background;
cursor: "default";
}
/*****----- Main Box -----*****/
mainbox {
enabled: true;
spacing: 0px;
margin: 0px;
padding: 0px;
border: 0px solid;
border-radius: 0px 0px 0px 0px;
border-color: @selected;
background-color: transparent;
children: [ "inputbar", "listview" ];
}
/*****----- Inputbar -----*****/
inputbar {
enabled: true;
spacing: 10px;
margin: 0px;
padding: 15px;
border: 0px solid;
border-radius: 0px;
border-color: @selected;
background-color: @selected;
text-color: @background;
children: [ "prompt", "entry" ];
}
prompt {
enabled: true;
background-color: inherit;
text-color: inherit;
}
textbox-prompt-colon {
enabled: true;
expand: false;
str: "::";
background-color: inherit;
text-color: inherit;
}
entry {
enabled: true;
background-color: inherit;
text-color: inherit;
cursor: text;
placeholder: "Search...";
placeholder-color: inherit;
}
/*****----- Listview -----*****/
listview {
enabled: true;
columns: 1;
lines: 6;
cycle: true;
dynamic: true;
scrollbar: false;
layout: vertical;
reverse: false;
fixed-height: true;
fixed-columns: true;
spacing: 5px;
margin: 0px;
padding: 0px;
border: 0px solid;
border-radius: 0px;
border-color: @selected;
background-color: transparent;
text-color: @foreground;
cursor: "default";
}
scrollbar {
handle-width: 5px ;
handle-color: @selected;
border-radius: 0px;
background-color: @background-alt;
}
/*****----- Elements -----*****/
element {
enabled: true;
spacing: 10px;
margin: 0px;
padding: 8px;
border: 0px solid;
border-radius: 0px;
border-color: @selected;
background-color: transparent;
text-color: @foreground;
cursor: pointer;
}
element normal.normal {
background-color: @background;
text-color: @foreground;
}
element selected.normal {
background-color: @background-alt;
text-color: @foreground;
}
element-icon {
background-color: transparent;
text-color: inherit;
size: 32px;
cursor: inherit;
}
element-text {
background-color: transparent;
text-color: inherit;
highlight: inherit;
cursor: inherit;
vertical-align: 0.5;
horizontal-align: 0.0;
}
/*****----- Message -----*****/
error-message {
padding: 15px;
border: 2px solid;
border-radius: 12px;
border-color: @selected;
background-color: @background;
text-color: @foreground;
}
textbox {
background-color: @background;
text-color: @foreground;
vertical-align: 0.5;
horizontal-align: 0.0;
highlight: none;
}
+20
View File
@@ -0,0 +1,20 @@
#!/usr/bin/env bash
## Author : Aditya Shakya (adi1090x)
## Github : @adi1090x
#
## Rofi : Launcher (Modi Drun, Run, File Browser, Window)
#
## Available Styles
#
## style-1 style-2 style-3 style-4 style-5
## style-6 style-7 style-8 style-9 style-10
## style-11 style-12 style-13 style-14 style-15
dir="$HOME/.config/wofi/launcher/config.rasi"
theme='style-1'
## Run
wofi \
-show drun \
-theme ${dir}/${theme}.rasi
+18
View File
@@ -0,0 +1,18 @@
/**
*
* Author : Aditya Shakya (adi1090x)
* Github : @adi1090x
*
* Colors
*
* Available Colors Schemes
*
* adapta catppuccin everforest navy paper
* arc cyberpunk gruvbox nord solarized
* black dracula lovelace onedark yousai
*
**/
/* Import color-scheme from `colors` directory */
@import "~/.config/wofi/colors/onedark.rasi"
+12
View File
@@ -0,0 +1,12 @@
/**
*
* Author : Aditya Shakya (adi1090x)
* Github : @adi1090x
*
* Fonts
*
**/
* {
font: "Iosevka Nerd Font 10";
}
+62
View File
@@ -0,0 +1,62 @@
{lib, ...}: {
programs.starship = {
enable = true;
settings = {
format = lib.concatStrings [
"$username"
"$hostname"
"$directory"
"$git_branch"
"$git_state"
"$git_status"
"$cmd_duration"
"$line_break"
"$python"
"$character"
];
directory = {
style = "blue";
};
character = {
success_symbol = "[](purple)";
error_symbol = "[](red)";
vimcmd_symbol = "[](green)";
};
git_branch = {
format = "[$branch]($style)";
style = "bright-black";
};
git_status = {
format = "[(*$conflicted$untracked$modified$staged$renamed$deleted) $ahead_behind$stashed]($style)";
style = "cyan";
conflicted = "";
untracked = "";
modified = "";
staged = "";
renamed = "";
deleted = "";
stashed = "";
};
git_state = {
format = "([$state( $progress_current/$progress_total)]($style)) ";
style = "bright-black";
};
cmd_duration = {
format = "[$duration]($style) ";
style = "yellow";
};
python = {
format = "[$virtualenv]($style) ";
style = "bright-black";
};
};
};
# home.file.".config/starship.toml" = {
# source = builtins.toPath ./pure.toml;
# };
}
+5
View File
@@ -0,0 +1,5 @@
{
programs.steam = {
enable = true;
};
}
+3
View File
@@ -0,0 +1,3 @@
{...}: {
services.swww.enable = true;
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

+229
View File
@@ -0,0 +1,229 @@
{ username, hostname, ... }: {
programs.waybar = {
enable = true;
settings = [
{
margin-top = 10;
margin-left = 10;
margin-right = 10;
layer = "top";
position = "top";
modules-left = [
"custom/start"
"hyprland/submap"
"hyprland/workspaces"
"hyprland/window"
];
modules-right = [
"tray"
"temperature"
"cpu"
"memory"
"disk"
"network"
"pulseaudio"
"battery"
"power-profiles-daemon"
"clock"
];
"cpu" = {
states = {
critical = 85;
};
interval = 1;
format = " {usage:2}%";
on-click = "kitty btop";
};
"memory" = {
states = {
critical = 85;
};
interval = 1;
format = " {percentage}%";
on-click = "kitty btop";
};
"disk" = {
states = {
critical = 85;
};
interval = 5;
format = " {percentage_used}%";
on-click = "kitty btop";
};
"network" = {
format-ethernet = " {bandwidthDownOctets}";
format-wifi = " {signalStrength}%";
format-disconnected = "";
format-disabled = "";
tooltip = false;
on-click = "rofi-network-manager";
};
"temperature" = {
critical-threshold = 80;
format = " {temperatureC}°C";
interval = 1;
on-click = "kitty btop";
};
"power-profiles-daemon" = {
format = "{icon} {profile}";
format-icons = {
performance = "";
power-saver = "";
balanced = "";
};
};
"hyprland/workspaces" = {
format = "{name}";
format-icons = {
default = " ";
active = " ";
urgent = " ";
};
on-scroll-down = "hyprctl dispatch workspace e+1";
on-scroll-up = "hyprctl dispatch workspace e-1";
};
"hyprland/window" = {
icon = true;
max-length = 45;
separate-outputs = false;
rewrite = {
"" = "${username}@${hostname}";
"~" = "${username}@${hostname}";
};
on-click-right = "hyprctl dispatch fullscreen 0";
on-click-middle = "hyprctl dispatch killactive";
on-click = "hyprctl dispatch fullscreen 1";
};
"hyprland/submap" = {
format = " {}";
on-click = "hyprctl dispatch submap reset";
};
"clock" = {
format = "{:%b %d, %I:%M %p}";
};
"tray" = {
spacing = 12;
};
"taskbar" = {
icon-size = 10;
icon-theme = "Papirus-Dark";
on-click = "activate";
on-click-right = "fullscreen";
on-click-middle = "close";
on-scroll-up = "maximize";
on-scroll-down = "minimize";
};
"pulseaudio" = {
format = "{icon} {volume}% {format_source}";
format-bluetooth = "{volume}% {icon} {format_source}";
format-bluetooth-muted = " {icon} {volume}% {format_source_muted}";
format-muted = " {volume}% {format_source_muted}";
format-source = "";
format-source-muted = "";
format-icons = {
headphone = "";
hands-free = "";
headset = "";
phone = "";
portable = "";
car = "";
default = [
""
""
""
];
};
on-click = "pavucontrol";
on-click-right = "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle";
};
"battery" = {
states = {
warning = 30;
critical = 15;
};
format = "{icon} {capacity}%";
format-charging = " {capacity}%";
format-plugged = " {capacity}%";
format-icons = [
""
""
""
""
""
];
interval = 1;
on-click = "";
};
"custom/start" = {
format = "";
on-click-right = "rofi -show power-menu -modi power-menu:rofi-power-menu";
on-click = "rofi -show drun";
};
}
];
style = ''
* {
font-size: 12px;
font-family: Font Awesome, monospace;
font-weight: bold;
color: @text;
transition: none;
}
window#waybar {
background: rgba(0,0,0,0);
border: none;
}
#workspaces button {
border-radius: 0px;
margin: 0px;
background: none;
border: none;
}
#workspaces button:hover, #custom-start:hover, #window:hover {
border: none;
outline: none;
background: none;
color: @text;
background-size: 300% 300%;
background: @surface0;
}
#workspaces button.active, #submap {
background: @surface1;
}
#custom-start {
padding: 0px 5px;
color: @sky;
font-size: 16px;
}
#window, #submap {
padding: 0px 5px;
}
.modules-left, .modules-right {
background-color: @crust;
border: 2px solid @surface1;
border-radius: 10px;
padding: 0 5px;
}
#submap, #workspaces, #cpu, #memory, #disk, #clock, #window, #tray, #pulseaudio, #battery, #network, #temperature, #power-profiles-daemon, #custom-exit, #custom-start {
margin: 0 5px;
}
.critical, .muted, .performance {
color: @red;
}
.warning, .urgent {
color: @yellow;
}
.charging, .plugged, .power-saver {
color: @green;
}
'';
};
}
+55
View File
@@ -0,0 +1,55 @@
{
"$schema": "https://raw.githubusercontent.com/JanDeDobbeleer/oh-my-posh/main/themes/schema.json",
"blocks": [
{
"alignment": "left",
"segments": [
{
"foreground": "#ffdd86",
"style": "plain",
"template": "{{ .UserName }}@{{ .HostName }} ",
"type": "session"
},
{
"foreground": "#42a9ff",
"style": "plain",
"properties": {
"style": "full"
},
"template": "{{ .Path }} ",
"type": "path"
},
{
"properties": {
"branch_icon": "",
"fetch_status": true
},
"style": "plain",
"template": "git:{{ if or (.Working.Changed) (.Staging.Changed) (gt .StashCount 0) }}<#ffdd86>{{ .HEAD }}</>{{ else }}{{ .HEAD }}{{ end }}{{ if .Staging.Changed }} <#98c379>{{ .Staging.String }}</>{{ end }}{{ if .Working.Changed }} <#d16971>{{ .Working.String }}</>{{ end }}",
"type": "git"
}
],
"type": "prompt"
},
{
"alignment": "left",
"newline": true,
"segments": [
{
"foreground": "#ffdd86",
"foreground_templates": [
"{{ if gt .Code 0 }}#42a9ff{{ end }}"
],
"properties": {
"always_enabled": true
},
"style": "plain",
"template": "> ",
"type": "status"
}
],
"type": "prompt"
}
],
"version": 3
}
+40
View File
@@ -0,0 +1,40 @@
{
pkgs,
terminal,
...
}: {
home.packages = with pkgs; [
zoxide
];
programs.zsh.enable = true;
programs.zoxide.enable = true;
programs.zsh = {
enableCompletion = false;
syntaxHighlighting.enable = false;
shellAliases = terminal.shellAliases;
history.size = 10000;
antidote = {
enable = true;
plugins = [
"MichaelAquilina/zsh-autoswitch-virtualenv"
"jeffreytse/zsh-vi-mode"
"zdharma-continuum/fast-syntax-highlighting kind:defer"
"zsh-users/zsh-autosuggestions kind:defer"
"zsh-users/zsh-history-substring-search kind:defer"
];
};
initContent = ''
# zsh-autocomplete
# bindkey -M menuselect '^M' .accept-line # run code when selected completion
autoload -Uz compinit
if [ "$(date +'%j')" != "$(stat -f '%Sm' -t '%j' ~/.zcompdump 2>/dev/null)" ]; then
compinit
else
compinit -C
fi
'';
};
}
-26
View File
@@ -1,26 +0,0 @@
hello: ENC[AES256_GCM,data:0NxDMh13g5abuc46q8WYpcVxZalJalE+dIhWZr0Ta6u1pbcrA1HH/8PQnRUIew==,iv:lQz0qVjjWJ6jajApiJ8x/fhAhpPLpDICR4eZnu0dCVw=,tag:F9brrGmlpOGaeFxTEJA54w==,type:str]
example_key: ENC[AES256_GCM,data:IJeH/2DXBN/WL7SMOQ==,iv:SFhmVUSiMTWrNxCRbSnQj1/Q4L1J+1H+YDWXRqQGgfk=,tag:T0LxlvqPc0ajqWFe1NR+Vw==,type:str]
#ENC[AES256_GCM,data:BFKNA5aiPIt5oWQIF6a9Cw==,iv:ez3Omp4B6bBYlt1tlpTYSXAfi/SrbJ03ILDUetAnf20=,tag:CFd05yXHZhu+lzLIe95azg==,type:comment]
example_array:
- ENC[AES256_GCM,data:bh+AhmfAe9Tp0D6WGLI=,iv:WSOnTzHWhkNJUcyhvHizb9RheYFNESZbJJ+G79GMQJs=,tag:chpWcINudyQIiWgdgrzSXA==,type:str]
- ENC[AES256_GCM,data:U+vm05ISl8ldk21+vwk=,iv:MKrw0o1FZ6Hzt0c6/gagbZb1jV12FSOUwiLoXr3QPac=,tag:LXOGzJSxkbEDbrIQuzWMog==,type:str]
example_number: ENC[AES256_GCM,data:ZVyoML4H0yZF3g==,iv:WTEu085WG5byuAPaPbAR0wCkBoMwvL2F6A6pFGkiuck=,tag:ZDdUBzl7tUJUhXv3bUlnZg==,type:float]
example_booleans:
- ENC[AES256_GCM,data:kPkHPw==,iv:dgj2RjGkfsRJoEB+cju5ceZa3/IBXccR0rcS+uYa4LA=,tag:8uDEVNqnq4DbiVHYTCvGFQ==,type:bool]
- ENC[AES256_GCM,data:mHvy44o=,iv:4KI2SHpq+as27W77puR7NEi5ILeYD0/YnYcF5/4Uq3I=,tag:QB5D0JOFZqZX5mVGf7j3NQ==,type:bool]
default_password: ENC[AES256_GCM,data:h+D4/V4Dstnlhut5LBIg9A==,iv:yrckE1BCwjvCGZYp/WlpYyRMZeWJMZE26QNQ/tvZIyY=,tag:S5it0ySU1MUNrItWNeYW/A==,type:str]
sops:
age:
- recipient: age1dhmt5tdyxd9zam542zkr9hq4tku7lzmf6j057sjtepk80deky5fqemczs5
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBKR0x1eHFCV1FvODF6MDVr
bXlQcTdQOUIyZW90RDhzYWxjU2pMQS84eFg4CjJvdDRyY1g3VmFzVUVMZFhwcEFv
OUk4U0U2SHFUWXVRTmcxdGpiSHhJZ00KLS0tICt1VjBvZWJRVlRqOHF2MTZyWmZq
UHFNTUdHdE9WaGJraW5OY25DQUdiYmMK2yANe44uUYavGc9UvLwOzpQH/kuY/g5D
8lNECUT7gfna7T0lEuBqafiUtRMJFgWLPqSk83pVg0FhQ5PJVtEqzw==
-----END AGE ENCRYPTED FILE-----
lastmodified: "2025-12-24T22:27:52Z"
mac: ENC[AES256_GCM,data:etJw5g4joy063Y64ohU3H7KH6gpN1FBCbnlvf/HiMQW48rlHI8RnGWZDxMUAa0oO/cTcWpbQU9U6wLrn5lT2879m2lTqa/MuoibeViWdNMb9HrJ7nzlceWJlhCGq3feC91R1o/d3E90EXm3PC0s0AXx9PsaJ5k3rHdeITs7zbZQ=,iv:zUvj2+rS/T0lvzVbL/eFwTOMqd2pVwE9LtWEpxMaw6k=,tag:2SWFeV8dSI4wkbIYaA6IzA==,type:str]
unencrypted_suffix: _unencrypted
version: 3.11.0
-3
View File
@@ -1,3 +0,0 @@
{pkgs, ...}: {
hardware.amdgpu.initrd.enable = true;
}

Some files were not shown because too many files have changed in this diff Show More