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
109 changed files with 3253 additions and 1420 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
HakaseOS is an opinionated NixOS configuration heavily inspired by OmarchyOS.
# Sakamoto NixOS
## Features
* Vim keybindings
* TUI applications
* Simple Setup
* Pre-configured Firefox
Sakamoto NixOS is built with various profiles intended for reproducibility.
## How to Use SOPS
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.
## Available Hosts
To get started, follow the instructions below.
1. Create a folder.
```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
- MacBook M series
- Linux
```
Replace as according to your needs.
5. Create a sops `.yaml` file.
```sh
nix-shell -p sops --run "sops secrets/example.yaml"
```
NOTE: If you add a new host to your `.sops.yaml`, you will need to update the keys for all secrets.
```sh
nix-shell -p sops --run "sops updatekeys secrets/example.yaml"
```
## Installation
1. Install [Nix](https://nixos.org/download/).
2. Ensure Nix is installed properly by running the following (this also gives you `nano` for editing later):
```sh
nix-shell -p nano
```
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...
}
-44
View File
@@ -1,44 +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
# [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;
};
}
-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)";
};
};
};
}
-6
View File
@@ -1,6 +0,0 @@
{pkgs, ...}: {
home.packages = with pkgs; [
pamixer
wiremix
];
}
-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 = "{:%-I:%M %a %b %e}";
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.

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 = {
nixos = {
username = "kenji";
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
hostname = "hakase";
username = "kenji";
timezone = "America/Chicago";
Host gitea.sakamoto.dev
User kenji
ProxyCommand cloudflared access ssh --hostname %h
HostName gitea.sakamoto.dev
vpn = {
vpnEnable = false;
vpnSecretFile = "/home/kenji/Wireguard/secret";
};
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
'
'';
};
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";
}
];
agu = "pkill gjs & ags run ~/.config/nixos/pkgs/ags/biscuit/app.ts & disown (jobs -p) &";
};
};
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
+646 -335
View File
File diff suppressed because it is too large Load Diff
+71 -26
View File
@@ -1,50 +1,95 @@
{
description = "Hakase Configuration";
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
description = "A very basic flake";
home-manager = {
url = "github:nix-community/home-manager";
inputs.nixpkgs.follows = "nixpkgs";
};
hyprland = {
url = "git+https://github.com/hyprwm/Hyprland?submodules=1";
inputs.nixpkgs.follows = "nixpkgs";
};
nixovim = {
# FIXME: treesitter does not install automatically (disabled due to read-only problems)
url = "git+https://git.sakamoto.dev/kenji/nixovim.git";
inputs.nixpkgs.follows = "nixpkgs";
};
sops-nix = {
url = "github:Mic92/sops-nix";
inputs.nixpkgs.follows = "nixpkgs";
};
inputs = {
nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable";
home-manager.url = "github:nix-community/home-manager";
home-manager.inputs.nixpkgs.follows = "nixpkgs"; # `follows` ensure it follows nixpkgs versiona. Avoids breaking updates.
darwin.url = "github:lnl7/nix-darwin";
darwin.inputs.nixpkgs.follows = "nixpkgs";
ags.url = "github:aylur/ags";
ags.inputs.nixpkgs.follows = "nixpkgs";
hyprland.url = "github:hyprwm/Hyprland";
hyprland.inputs.nixpkgs.follows = "nixpkgs";
unlisted-fonts.url = "git+https://git.sakamoto.dev/kenji/nix-fonts.git";
unlisted-fonts.inputs.nixpkgs.follows = "nixpkgs";
nixvim.url = "github:nix-community/nixvim";
nixvim.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 = {
self,
nixpkgs,
home-manager,
nixovim, # FIXME: should be inside of modules
sops-nix,
darwin,
ags,
hyprland,
unlisted-fonts,
nix-neovim,
...
} @ inputs: let
config = import ./config.nix;
lib = nixpkgs.lib;
system = "x86_64-linux";
# pkgs = nixpkgs.legacyPackages.${system}; # alternative, without overlays. Unused.
args =
{
inherit inputs system;
}
// config;
in {
# linux only
nixosConfigurations = {
hakase = nixpkgs.lib.nixosSystem {
desktop = lib.nixosSystem {
inherit system;
specialArgs = args;
modules = [
home-manager.nixosModules.home-manager
sops-nix.nixosModules.sops
./hosts/hakase/configuration.nix
./nixos/desktop/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";
}
-11
View File
@@ -1,11 +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
];
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
];
}
-5
View File
@@ -1,5 +0,0 @@
{
imports = [
../../apps/hyprland/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
];
}
-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,
myConfig,
terminal,
...
}: {
programs.zoxide.enable = true;
programs.fish = {
enable = true;
interactiveShellInit = ''
set fish_greeting
fish_vi_key_bindings
zoxide init fish | source
zoxide init fish --cmd cd | source
'';
shellAliases = myConfig.terminal.aliases;
shellAliases = terminal.shellAliases;
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;
}
-36
View File
@@ -1,36 +0,0 @@
{pkgs, ...}: {
boot = {
consoleLogLevel = 3;
initrd.verbose = false;
kernelParams = [
"quiet"
"splash"
"intremap=on"
"boot.shell_on_fail"
"udev.log_priority=3"
"rd.systemd.show_status=auto"
];
loader = {
systemd-boot = {
enable = true;
};
efi = {
canTouchEfiVariables = true;
efiSysMountPoint = "/boot";
};
};
initrd = {
systemd.enable = true;
};
plymouth = {
enable = true;
# themePackages = [
# (pkgs.adi1090x-plymouth-themes.override {
# selected_themes = ["circle_hud"];
# })
# ];
# theme = "circle_hud";
};
};
}
+119
View File
@@ -0,0 +1,119 @@
{
pkgs,
hostname,
timezone,
touchpadSupport,
inputs,
logitech-hardware,
...
}: {
environment.systemPackages = with pkgs;
[
python313Full
gobject-introspection
gtk3
libxml2
git
cargo
gcc
rustc
nodejs
yarn
busybox
p7zip
btop
tldr
jq
lm_sensors
gparted
notify
mangohud
]
++ [
inputs.matugen.packages.${pkgs.system}.default
]
++ lib.optionals (logitech-hardware.enable == true) [
solaar
];
boot.loader = {
systemd-boot = {
enable = false;
};
efi = {
canTouchEfiVariables = true;
};
grub = {
enable = true;
device = "nodev";
};
};
hardware = {
logitech.wireless.enable = logitech-hardware.enable;
bluetooth = {
enable = true;
powerOnBoot = true;
};
};
i18n.defaultLocale = "en_US.UTF-8";
console = {
font = "Lat2-Terminus16";
useXkbConfig = true; # use xkb.options in tty.
};
networking.hostName = "${hostname}";
networking.networkmanager.enable = true; # Easiest to use and most distros use this by default.
time.timeZone = "${timezone}";
services = {
openssh = {
enable = true;
ports = [22];
settings = {
PasswordAuthentication = true;
};
};
libinput.enable = touchpadSupport;
blueman.enable = true;
};
programs.bash = {
interactiveShellInit = ''
if [[ $(${pkgs.procps}/bin/ps --no-header --pid=$PPID --format=comm) != "fish" && -z ''${BASH_EXECUTION_STRING} ]]
then
shopt -q login_shell && LOGIN_OPTION='--login' || LOGIN_OPTION=""
exec ${pkgs.fish}/bin/fish $LOGIN_OPTION
fi
'';
};
programs = {
zsh.enable = true;
fish.enable = true;
};
# networking.firewall.allowedTCPPorts = [ ... ];
# networking.firewall.allowedUDPPorts = [ ... ];
# Or disable the firewall altogether.
# networking.firewall.enable = false;
# networking.proxy.default = "http://user:password@proxy:port/";
# networking.proxy.noProxy = "127.0.0.1,localhost,internal.domain";
# Copy the NixOS configuration file and link it from the resulting system
# (/run/current-system/configuration.nix). This is useful in case you
# accidentally delete configuration.nix.
# ONLY WORKS non-flake
# system.copySystemConfiguration = true;
}
+107
View File
@@ -0,0 +1,107 @@
{
config,
pkgs,
...
}: let
lock-false = {
Value = false;
Status = "locked";
};
lock-true = {
Value = true;
Status = "locked";
};
in {
programs = {
firefox = {
enable = true;
languagePacks = ["en-US"];
/*
---- POLICIES ----
*/
# Check about:policies#documentation for options.
policies = {
DisableTelemetry = true;
DisableFirefoxStudies = true;
EnableTrackingProtection = {
Value = true;
Locked = true;
Cryptomining = true;
Fingerprinting = true;
};
DisablePocket = true;
DisableFirefoxAccounts = true;
DisableAccounts = true;
DisableFirefoxScreenshots = true;
OverrideFirstRunPage = "";
OverridePostUpdatePage = "";
DontCheckDefaultBrowser = true;
DisplayBookmarksToolbar = "never"; # alternatives: "always" or "newtab"
DisplayMenuBar = "default-off"; # alternatives: "always", "never" or "default-on"
SearchBar = "unified"; # alternative: "separate"
/*
---- EXTENSIONS ----
*/
# Check about:support for extension/add-on ID strings.
# Valid strings for installation_mode are "allowed", "blocked",
# "force_installed" and "normal_installed".
ExtensionSettings = {
"*".installation_mode = "blocked"; # blocks all addons except the ones specified below
# uBlock Origin:
"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/file/4493940/bitwarden_password_manager-2025.5.0.xpi";
installation_mode = "force_installed";
};
"tridactyl.vim@cmcaine.co.uk" = {
install_url = "https://addons.mozilla.org/firefox/downloads/file/4405615/tridactyl_vim-1.24.2.xpi";
installation_mode = "force_installed";
};
# Privacy Badger:
# "jid1-MnnxcxisBPnSXQ@jetpack" = {
# install_url = "https://addons.mozilla.org/firefox/downloads/latest/privacy-badger17/latest.xpi";
# installation_mode = "force_installed";
# };
# 1Password:
# "{d634138d-c276-4fc8-924b-40a0ea21d284}" = {
# install_url = "https://addons.mozilla.org/firefox/downloads/latest/1password-x-password-manager/latest.xpi";
# installation_mode = "force_installed";
};
};
/*
---- PREFERENCES ----
*/
# Check about:config for options.
preferences = {
# "browser.contentblocking.category" = {
# Value = "strict";
# Status = "locked";
# };
"browser.contentblocking.category" = "strict";
"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;
};
};
};
}
+6
View File
@@ -0,0 +1,6 @@
{pkgs, ...}: {
environment.systemPackages = with pkgs; [
bibata-cursors
hyprcursor
];
}
+16
View File
@@ -0,0 +1,16 @@
{
pkgs,
inputs,
system,
...
}: let
unlisted-fonts = inputs.unlisted-fonts.packages.${pkgs.system};
in {
fonts.packages = with pkgs; [
unlisted-fonts.monolisa
unlisted-fonts.rubik
nerd-fonts.fira-code
nerd-fonts.jetbrains-mono
nerd-fonts.iosevka
];
}
+3
View File
@@ -0,0 +1,3 @@
{pkgs, ...}: {
services.printing.enable = true;
}
+13
View File
@@ -0,0 +1,13 @@
{ pkgs, ... }: {
# Enable sound.
# services.pulseaudio.enable = true;
# OR
environment.systemPackages = with pkgs; [
pavucontrol
];
security.rtkit.enable = true;
services.pipewire = {
enable = true;
pulse.enable = true;
};
}
@@ -1,5 +1,4 @@
{pkgs, ...}: {
environment.systemPackages = with pkgs; [
git
];
}
+24
View File
@@ -0,0 +1,24 @@
{
pkgs,
inputs,
...
}: {
environment.systemPackages = with pkgs; [
wl-clipboard
hypridle
hyprlock
brightnessctl
];
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;
};
hardware = {
graphics.enable = true;
};
services = {
# displayManager.sddm.wayland = true;
displayManager.gdm.enable = true;
};
}
-6
View File
@@ -1,6 +0,0 @@
{pkgs, ...}: {
fonts.packages = with pkgs; [
nerd-fonts.fira-code
nerd-fonts.jetbrains-mono
];
}
-16
View File
@@ -1,16 +0,0 @@
{pkgs, ...}: {
hardware = {
bluetooth = {
enable = true;
powerOnBoot = true;
};
};
networking = {
networkmanager.enable = true;
firewall = {
enable = true;
allowedTCPPorts = [22 80];
allowedUDPPorts = [53];
};
};
}
-16
View File
@@ -1,16 +0,0 @@
{
specialArgs,
myConfig,
...
}: {
home-manager = {
backupFileExtension = "backup";
useGlobalPkgs = true;
useUserPackages = true;
extraSpecialArgs = specialArgs;
users.${myConfig.nixos.username} = import ../home/hakase.nix;
};
imports = [
];
}

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