Compare commits
77 Commits
999710d44c
..
master
| Author | SHA1 | Date | |
|---|---|---|---|
| 17cb857271 | |||
| 86742306cb | |||
| 47f2d1bd2a | |||
| 92d6e19fa8 | |||
| a8f6af8fc9 | |||
| e914ffd552 | |||
| a308923512 | |||
| c148be1a99 | |||
| ced387584e | |||
| ac840fb5e9 | |||
| 71d1da366d | |||
| e0b9f8b91a | |||
| c510e43618 | |||
| fb2ae2d470 | |||
| 035b8522ff | |||
| 4ccfeb12fe | |||
| 67adb36f6b | |||
| 8b6d867659 | |||
| 84ee68cb1f | |||
| 2d7fcc8801 | |||
| ec2293db2e | |||
| b6974cb4a2 | |||
| 3dfb455a1c | |||
| 636cac904e | |||
| 12da637cf8 | |||
| a39ffa9cc7 | |||
| 36399861f0 | |||
| ac892bcff7 | |||
| 9579fafceb | |||
| 3dcc23facb | |||
| 009a7145b8 | |||
| 226b61bf21 | |||
| 4586dd1d9c | |||
| 291f442a45 | |||
| 45010d5f0a | |||
| e1cf3ad59d | |||
| bc268218a5 | |||
| 9a05a5546f | |||
| cb224894b8 | |||
| 29453240ed | |||
| c3526e6eac | |||
| e0ca2aa3bf | |||
| 8aa7f53eca | |||
| 9b4c4991c4 | |||
| f040c4b610 | |||
| fac71ff78d | |||
| 1aa0ab9044 | |||
| 0f17915e8c | |||
| 171564d6dc | |||
| 4920a65aa2 | |||
| fc71417bc7 | |||
| 1aa742d2b2 | |||
| d0339032fa | |||
| 4f7a30197a | |||
| 2dcdd0b29a | |||
| 638b2e54dc | |||
| c11b7205bd | |||
| caada5a969 | |||
| ceb17c3a34 | |||
| e619754e92 | |||
| 068a46a9bf | |||
| 2cbe32f561 | |||
| e90d182cde | |||
| 2bede8d2bc | |||
| 1bb5ea283f | |||
| 173f9a08ca | |||
| 61e3f29db2 | |||
| 9a44776d59 | |||
| c83ad31922 | |||
| 990b154250 | |||
| 4cb03bcbbb | |||
| 5f6dbaac10 | |||
| 9a24848f21 | |||
| 10e9e6e426 | |||
| e11b3547d4 | |||
| d80c5c1074 | |||
| 954407bfa0 |
@@ -1,7 +0,0 @@
|
||||
keys:
|
||||
- &user_kenji age1dhmt5tdyxd9zam542zkr9hq4tku7lzmf6j057sjtepk80deky5fqemczs5
|
||||
creation_rules:
|
||||
- path_regex: secrets/[^/]+\.(yaml|json|env|ini)$
|
||||
key_groups:
|
||||
- age:
|
||||
- *user_kenji
|
||||
@@ -1,60 +1,63 @@
|
||||
# HakaseOS
|
||||
HakaseOS is an opinionated NixOS configuration heavily inspired by OmarchyOS.
|
||||
# Nix Sakamoto
|
||||
A rewrite of the original Sakamoto NixOS configuration.
|
||||
|
||||
## Features
|
||||
* Vim keybindings
|
||||
* Simple Setup
|
||||
* Pre-configured Firefox
|
||||
## Installation
|
||||
Installing Sakamoto Nix configuration may vary on your current operating system.
|
||||
|
||||
## To-do
|
||||
* TUI for everything
|
||||
| Hosts | Description |
|
||||
|----------|--------------|
|
||||
| hakase | gaming desktop (linux) |
|
||||
| sakamoto | \[unavailable] server that uses containers (linux) |
|
||||
| nano | \[unavailable] windows configuration |
|
||||
| macos | macos configuration |
|
||||
|
||||
## 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.
|
||||
**Note: Replace `${Hosts}` with one of the options from the table above.**
|
||||
|
||||
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
|
||||
### Linux Installation
|
||||
|
||||
```
|
||||
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"
|
||||
```
|
||||
1. Install [Nix](https://nixos.org).
|
||||
2. Clone this directory.
|
||||
```sh
|
||||
$ git clone https://git.sakamoto.dev/kenji/nixos.git ~/.config/nixos
|
||||
```
|
||||
3. Create a hardware-configuration.conf
|
||||
```sh
|
||||
$ sudo nixos-generate-config --dir ~/.config/nixos/hosts/${Hosts}/
|
||||
```
|
||||
4. ⚠️ Modify `config.nix` that suits your configuration. **Be sure to edit `config.nix`! Most especially `myConfig.essentials.Username`. Otherwise, your OS could break!!!**
|
||||
5. Rebuild.
|
||||
```sh
|
||||
$ sudo nixos-rebuild switch --flake ~/.config/nixos/hosts/#${Hosts}
|
||||
```
|
||||
6. Install unstable channel (fixes `pkgs.fish` misconfiguration).
|
||||
```sh
|
||||
$ nix-channel --add https://nixos.org/channels/nixos-unstable nixos nix-channel --update
|
||||
```
|
||||
7. (Optional) You can install `proton-ge` by running the following command:
|
||||
```sh
|
||||
protonup
|
||||
```
|
||||
8. (Optional) Add Decky Loader for Steam via this command:
|
||||
```sh
|
||||
touch ~/.steam/steam/.cef-enable-remote-debugging
|
||||
|
||||
```
|
||||
### MacOS (Darwin) Installation
|
||||
1. Install [Nix](https://nixos.org).
|
||||
2. Clone this directory.
|
||||
```sh
|
||||
$ git clone https://git.sakamoto.dev/kenji/nixos.git ~/.config/nixos
|
||||
```
|
||||
3. ⚠️ Modify `config.nix` that suits your configuration. **Be sure to edit `config.nix`! Most especially `myConfig.essentials.Username`. Otherwise, configuration would not work!!!**
|
||||
4. Rebuild.
|
||||
```sh
|
||||
$ sudo nix run nix-darwin --extra-experimental-features "nix-command flakes" -- switch --flake ~/.config/nixos#macos
|
||||
```
|
||||
|
||||
## Problems:
|
||||
* XDG defaults (file manager default is terminal)
|
||||
* File Manager must be TUI
|
||||
* Bluetooth and WiFi should open at TUI
|
||||
* Steam and Heroic incompatible
|
||||
* Broken switchwall.sh
|
||||
* Box fonts
|
||||
|
||||
@@ -1,130 +0,0 @@
|
||||
{
|
||||
pkgs,
|
||||
myConfig,
|
||||
inputs,
|
||||
...
|
||||
}: {
|
||||
imports = [
|
||||
inputs.textfox.homeManagerModules.default
|
||||
./textfox.nix
|
||||
];
|
||||
home.packages = with pkgs; [pywalfox-native];
|
||||
|
||||
programs.firefox = {
|
||||
enable = true;
|
||||
languagePacks = ["en-US"];
|
||||
# nativeMessagingHosts = [pkgs.pywalfox-native];
|
||||
|
||||
profiles = {
|
||||
hakase = {
|
||||
search.force = true;
|
||||
isDefault = true;
|
||||
search.default = "ddg";
|
||||
extensions.packages = with pkgs.nur.repos.rycee.firefox-addons; [
|
||||
ublock-origin
|
||||
bitwarden
|
||||
tridactyl
|
||||
# pywalfox
|
||||
];
|
||||
|
||||
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";
|
||||
# };
|
||||
# };
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -1,48 +0,0 @@
|
||||
{
|
||||
textfox = {
|
||||
enable = true;
|
||||
profile = "hakase";
|
||||
config = {
|
||||
# background = {
|
||||
# color = "#123456";
|
||||
# };
|
||||
# border = {
|
||||
# color = "#654321";
|
||||
# width = "4px";
|
||||
# transition = "1.0s ease";
|
||||
# radius = "3px";
|
||||
# };
|
||||
# displayWindowControls = true;
|
||||
# displayNavButtons = true;
|
||||
# displayUrlbarIcons = true;
|
||||
# displaySidebarTools = false;
|
||||
displayTitles = true;
|
||||
# newtabLogo = " __ __ ____ \A / /____ _ __/ /_/ __/___ _ __\A / __/ _ \\| |/_/ __/ /_/ __ \\| |/_/\A / /_/ __/> </ /_/ __/ /_/ /> < \A \\__/\\___/_/|_|\\__/_/ \\____/_/|_| ";
|
||||
# font = {
|
||||
# family = "Fira Code";
|
||||
# size = "15px";
|
||||
# accent = "#654321";
|
||||
# };
|
||||
tabs = {
|
||||
horizontal.enable = false;
|
||||
# horizontal.enable = true;
|
||||
# vertical.enable = true;
|
||||
# vertical.margin = "1.0rem";
|
||||
};
|
||||
# navbar = {
|
||||
# margin = "8px 8px 2px";
|
||||
# padding = "4px";
|
||||
# };
|
||||
bookmarks = {
|
||||
alignment = "left";
|
||||
};
|
||||
# icons = {
|
||||
# toolbar.extensions.enable = true;
|
||||
# context.extensions.enable = true;
|
||||
# context.firefox.enable = true;
|
||||
# };
|
||||
# textTransform = "uppercase";
|
||||
# extraConfig = "/* custom css here */";
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -1,26 +0,0 @@
|
||||
{
|
||||
config,
|
||||
pkgs,
|
||||
...
|
||||
}: {
|
||||
home.file.".config/ghostty/screensaver".text = ''
|
||||
window-padding-x = 0
|
||||
window-padding-y = 0
|
||||
window-padding-color = "extend-always"
|
||||
'';
|
||||
programs.ghostty = {
|
||||
enable = true;
|
||||
package =
|
||||
if pkgs.stdenv.isDarwin
|
||||
then pkgs.ghostty-bin
|
||||
else pkgs.ghostty;
|
||||
enableFishIntegration = true;
|
||||
|
||||
settings = {
|
||||
confirm-close-surface = false;
|
||||
window-padding-x = 15;
|
||||
window-padding-y = 15;
|
||||
window-padding-balance = true;
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -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}";
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -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";
|
||||
# };
|
||||
# };
|
||||
}
|
||||
@@ -1,13 +0,0 @@
|
||||
{
|
||||
imports = [
|
||||
./hypr/binds.nix
|
||||
./hypr/general.nix
|
||||
./hypr/exec.nix
|
||||
./hypr/rules.nix
|
||||
./hypr/animation.nix
|
||||
./hypr/misc.nix
|
||||
./hypr/input.nix
|
||||
];
|
||||
wayland.windowManager.hyprland.enable = true;
|
||||
wayland.windowManager.hyprland.systemd.enable = false; # for UWSM support...
|
||||
}
|
||||
@@ -1,51 +0,0 @@
|
||||
{
|
||||
wayland.windowManager.hyprland.settings = {
|
||||
animations = {
|
||||
enabled = true;
|
||||
|
||||
bezier = [
|
||||
"easeOutQuint,0.23,1,0.32,1"
|
||||
"easeInOutCubic,0.65,0.05,0.36,1"
|
||||
"linear,0,0,1,1"
|
||||
"almostLinear,0.5,0.5,0.75,1.0"
|
||||
"quick,0.15,0,0.1,1"
|
||||
];
|
||||
|
||||
animation = [
|
||||
"global, 1, 10, default"
|
||||
"border, 1, 5.39, easeOutQuint"
|
||||
"windows, 1, 4.79, easeOutQuint"
|
||||
"windowsIn, 1, 4.1, easeOutQuint, popin 87%"
|
||||
"windowsOut, 1, 1.49, linear, popin 87%"
|
||||
"fadeIn, 1, 1.73, almostLinear"
|
||||
"fadeOut, 1, 1.46, almostLinear"
|
||||
"fade, 1, 3.03, quick"
|
||||
"layers, 1, 3.81, easeOutQuint"
|
||||
"layersIn, 1, 4, easeOutQuint, fade"
|
||||
"layersOut, 1, 1.5, linear, fade"
|
||||
"fadeLayersIn, 1, 1.79, almostLinear"
|
||||
"fadeLayersOut, 1, 1.39, almostLinear"
|
||||
"workspaces, 0, 0, ease"
|
||||
];
|
||||
};
|
||||
decoration = {
|
||||
rounding = 0;
|
||||
|
||||
shadow = {
|
||||
enabled = true;
|
||||
range = 2;
|
||||
render_power = 3;
|
||||
color = "rgba(1a1a1aee)";
|
||||
};
|
||||
|
||||
blur = {
|
||||
enabled = true;
|
||||
size = 2;
|
||||
passes = 2;
|
||||
special = true;
|
||||
brightness = 0.60;
|
||||
contrast = 0.75;
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -1,70 +0,0 @@
|
||||
{pkgs, ...}: {
|
||||
services.swayosd.enable = true;
|
||||
home.packages = [
|
||||
pkgs.playerctl
|
||||
];
|
||||
wayland.windowManager.hyprland.settings = {
|
||||
bindel = [
|
||||
", XF86AudioRaiseVolume, exec, swayosd-client --output-volume raise"
|
||||
", XF86AudioLowerVolume, exec, swayosd-client --output-volume lower"
|
||||
", XF86MonBrightnessUp, exec, ddcutil setvcp 10 + 10"
|
||||
", XF86MonBrightnessDown, exec, ddcutil setvcp 10 - 10"
|
||||
];
|
||||
|
||||
bindl = [
|
||||
", XF86AudioMute, exec, swayosd-client --output-volume mute-toggle"
|
||||
", Caps_Lock, exec, swayosd-client --caps-lock"
|
||||
", XF86AudioPlay, exec, playerctl play-pause && notify-send -u low -t 1000 \"Media\" \"$(playerctl status)\""
|
||||
", XF86AudioPrev, exec, playerctl previous && notify-send -u low -t 1000 \"Previous Track\" \"$(playerctl metadata title)\""
|
||||
", XF86AudioNext, exec, playerctl next && notify-send -u low -t 1000 \"Next Track\" \"$(playerctl metadata title)\""
|
||||
", XF86AudioMute, exec, swayosd-client --output-volume mute-toggle"
|
||||
]; # FIXME: not working
|
||||
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"
|
||||
|
||||
# move window
|
||||
"SUPER SHIFT, h, Move window left, movewindow, l"
|
||||
"SUPER SHIFT, j, Move window down, movewindow, d"
|
||||
"SUPER SHIFT, k, Move window up, movewindow, u"
|
||||
"SUPER SHIFT, l, Move window right, movewindow, 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, Open App Launcher, exec, nc -U $XDG_RUNTIME_DIR/walker/walker.sock"
|
||||
|
||||
# [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)
|
||||
);
|
||||
};
|
||||
}
|
||||
@@ -1,14 +0,0 @@
|
||||
{pkgs, ...}: {
|
||||
home.packages = [
|
||||
pkgs.gum
|
||||
];
|
||||
wayland.windowManager.hyprland.settings = {
|
||||
env = [
|
||||
"GUM_CONFIRM_PROMPT_FOREGROUND,6"
|
||||
"GUM_CONFIRM_SELECTED_FOREGROUND,0"
|
||||
"GUM_CONFIRM_SELECTED_BACKGROUND,2"
|
||||
"GUM_CONFIRM_UNSELECTED_FOREGROUND,0"
|
||||
"GUM_CONFIRM_UNSELECTED_BACKGROUND,8"
|
||||
];
|
||||
};
|
||||
}
|
||||
@@ -1,27 +0,0 @@
|
||||
{pkgs, ...}: {
|
||||
home.packages = with pkgs; [
|
||||
psmisc
|
||||
];
|
||||
wayland.windowManager.hyprland.settings = {
|
||||
exec = [
|
||||
"pkill -x hyprpaper; uwsm app -- hyprpaper"
|
||||
"killall -SIGUSR2 .ghostty-wrappe"
|
||||
];
|
||||
exec-once = [
|
||||
"uwsm app -- waybar"
|
||||
"uwsm app -- hyprpaper"
|
||||
"uwsm app -- elephant"
|
||||
"uwsm app -- swayosd-server"
|
||||
|
||||
"walker --gapplication-service"
|
||||
"pywalfox start"
|
||||
|
||||
"[workspace 20 silent] uwsm app -- firefox"
|
||||
"[workspace 20 silent] uwsm app -- xdg-terminal-exec"
|
||||
|
||||
"sh -c 'sleep 2; hyprctl dispatch workspace 1'"
|
||||
|
||||
"[workspace 1] uwsm app -- xdg-terminal-exec"
|
||||
];
|
||||
};
|
||||
}
|
||||
@@ -1,18 +0,0 @@
|
||||
{myConfig, ...}: {
|
||||
wayland.windowManager.hyprland.settings = {
|
||||
general = {
|
||||
gaps_in = 5;
|
||||
gaps_out = 15;
|
||||
layout = "dwindle";
|
||||
};
|
||||
monitor = myConfig.hyprland.monitors;
|
||||
dwindle = {
|
||||
pseudotile = true;
|
||||
preserve_split = true;
|
||||
force_split = 2;
|
||||
};
|
||||
master = {
|
||||
new_status = "master";
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -1,11 +0,0 @@
|
||||
{
|
||||
wayland.windowManager.hyprland.settings = {
|
||||
input = {
|
||||
repeat_rate = 50;
|
||||
repeat_delay = 300;
|
||||
};
|
||||
cursor = {
|
||||
hide_on_key_press = true;
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -1,11 +0,0 @@
|
||||
{
|
||||
wayland.windowManager.hyprland.settings = {
|
||||
misc = {
|
||||
disable_hyprland_logo = true;
|
||||
disable_splash_rendering = true;
|
||||
focus_on_activate = true;
|
||||
anr_missed_pings = 3;
|
||||
new_window_takes_over_fullscreen = 1;
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -1,14 +0,0 @@
|
||||
{
|
||||
wayland.windowManager.hyprland.settings = {
|
||||
windowrulev2 = [
|
||||
# --- POPUP RULES (Wifi, BT, Audio) ---
|
||||
"float, class:^(org\.hakase\.popup\..*)$"
|
||||
"animation slide right, class:^(org\.hakase\.popup\..*)$"
|
||||
"dimaround, class:^(org\.hakase\.popup\..*)$"
|
||||
|
||||
# Prevent Firefox and Terminal from stealing focus on launch
|
||||
"suppressevent activate, workspace:20"
|
||||
"noinitialfocus, workspace:20"
|
||||
];
|
||||
};
|
||||
}
|
||||
@@ -1,12 +0,0 @@
|
||||
{myConfig, ...}: {
|
||||
services.hyprpaper = {
|
||||
enable = true;
|
||||
settings = {
|
||||
preload = ["../../assets/Wallpapers/${myConfig.hyprland.wallpaper}"];
|
||||
wallpaper = [
|
||||
"HDMI-A-1,../../assets/Wallpapers/${myConfig.hyprland.wallpaper}"
|
||||
];
|
||||
};
|
||||
};
|
||||
systemd.user.startServices = "sd-switch";
|
||||
}
|
||||
@@ -1,31 +0,0 @@
|
||||
[config] # FIXME: ~/.config feels unreliable. Use config.home.homeDirectory instead.
|
||||
reload_on_change = true
|
||||
|
||||
[templates.ghostty]
|
||||
input_path = "~/.config/matugen/templates/ghostty"
|
||||
output_path = "~/.config/ghostty/themes/matugen"
|
||||
post_hook = "killall -SIGUSR2 .ghostty-wrappe"
|
||||
|
||||
[templates.hyprland]
|
||||
input_path = "~/.config/matugen/templates/hyprland"
|
||||
output_path = "~/.config/hypr/matugen.conf"
|
||||
post_hook = "hyprctl reload"
|
||||
|
||||
[templates.waybar]
|
||||
input_path = "~/.config/matugen/templates/waybar"
|
||||
output_path = "~/.config/waybar/matugen.css"
|
||||
post_hook = "killall -SIGUSR2 .waybar-wrapped"
|
||||
|
||||
[templates.starship]
|
||||
input_path = "~/.config/matugen/templates/starship"
|
||||
output_path = "~/.config/starship.toml"
|
||||
|
||||
[templates.walker]
|
||||
input_path = "~/.config/matugen/templates/walker"
|
||||
output_path = "~/.config/walker/themes/nixos/style.css"
|
||||
|
||||
[templates.pywalfox]
|
||||
input_path = '~/.config/matugen/templates/firefox'
|
||||
output_path = '~/.cache/wal/colors.json'
|
||||
post_hook = 'pywalfox update'
|
||||
|
||||
@@ -1,23 +0,0 @@
|
||||
{
|
||||
pkgs,
|
||||
inputs,
|
||||
...
|
||||
}: {
|
||||
home.packages = with pkgs; [
|
||||
matugen
|
||||
psmisc # for killall
|
||||
];
|
||||
home.file.".config/matugen/config.toml" = {
|
||||
source = ./config.toml;
|
||||
};
|
||||
|
||||
home.file.".config/matugen/templates" = {
|
||||
source = ./templates;
|
||||
recursive = true;
|
||||
};
|
||||
|
||||
programs.ghostty.settings.theme = "matugen";
|
||||
programs.starship.enable = true;
|
||||
wayland.windowManager.hyprland.settings.source = ["./matugen.conf"];
|
||||
programs.walker.config.theme = "nixos";
|
||||
}
|
||||
@@ -1,22 +0,0 @@
|
||||
{
|
||||
"wallpaper": "{{image}}",
|
||||
"alpha": "100",
|
||||
"colors": {
|
||||
"color0": "{{colors.background.default.hex}}",
|
||||
"color1": "",
|
||||
"color2": "",
|
||||
"color3": "",
|
||||
"color4": "",
|
||||
"color5": "",
|
||||
"color6": "",
|
||||
"color7": "",
|
||||
"color8": "",
|
||||
"color9": "",
|
||||
"color10": "{{colors.primary.default.hex}}",
|
||||
"color11": "",
|
||||
"color12": "",
|
||||
"color13": "{{colors.surface_bright.default.hex}}",
|
||||
"color14": "",
|
||||
"color15": "{{colors.on_surface.default.hex}}"
|
||||
}
|
||||
}
|
||||
@@ -1,6 +0,0 @@
|
||||
background = {{colors.background.default.hex}}
|
||||
foreground = {{colors.on_surface.default.hex}}
|
||||
cursor-color = {{colors.on_surface.default.hex}}
|
||||
cursor-text = {{colors.on_surface_variant.default.hex}}
|
||||
selection-background = {{colors.secondary_fixed_dim.default.hex}}
|
||||
selection-foreground = {{colors.on_secondary.default.hex}}
|
||||
@@ -1,4 +0,0 @@
|
||||
<* for name, value in colors *>
|
||||
$image = {{image}}
|
||||
${{name}} = rgba({{value.default.hex_stripped}}ff)
|
||||
<* endfor *>
|
||||
@@ -1,46 +0,0 @@
|
||||
format = '''
|
||||
$directory$git_branch$rust$python
|
||||
$character'''
|
||||
|
||||
palette = 'colors'
|
||||
|
||||
[palettes.colors]
|
||||
mustard = '#af8700' # example
|
||||
color1 = '{{colors.primary_fixed_dim.default.hex}}'
|
||||
color2 = '{{colors.on_primary.default.hex}}'
|
||||
color3 = '{{colors.on_surface_variant.default.hex}}'
|
||||
color4 = '{{colors.surface_container.default.hex}}'
|
||||
color5 = '{{colors.on_primary.default.hex}}'
|
||||
color6 = '{{colors.surface_dim.default.hex}}'
|
||||
color7 = '{{colors.surface.default.hex}}'
|
||||
color8 = '{{colors.primary.default.hex}}'
|
||||
color9 = '{{colors.tertiary.default.hex}}'
|
||||
|
||||
# Prompt symbols
|
||||
[character]
|
||||
success_symbol = "[🞈](color9 bold)"
|
||||
error_symbol = "[🞈](@{error})"
|
||||
vicmd_symbol = "[🞈](#f9e2af)"
|
||||
|
||||
[directory]
|
||||
format = "[](fg:color1 bg:color4)[](bg:color1 fg:color2)[ ](fg:color1 bg:color4)[$path ](fg:color3 bg:color4)[ ](fg:color4)"
|
||||
|
||||
[directory.substitutions]
|
||||
"Documents" = " "
|
||||
"Downloads" = " "
|
||||
"Music" = " "
|
||||
"Pictures" = " "
|
||||
|
||||
[git_branch]
|
||||
format = "[](fg:color8 bg:color4)[ ](bg:color8 fg:color5)[](fg:color8 bg:color4)[(bg:color8 fg:color5) $branch](fg:color3 bg:color4)[](fg:color4) "
|
||||
|
||||
[time]
|
||||
format = "[](fg:color8 bg:color4)[ ](bg:color8 fg:color5)[](fg:color8 bg:color4)[(bg:color8 fg:color5) $time](fg:color3 bg:color4)[](fg:color4) "
|
||||
disabled = false
|
||||
time_format = "%R" # Hour:Minute Format
|
||||
|
||||
[python]
|
||||
format = "[](fg:color8 bg:color4)[${symbol}${version}](bg:color8 fg:color5)[](fg:color8 bg:color4)[(bg:color8 fg:color5)( ${virtualenv})](fg:color3 bg:color4)[](fg:color4) "
|
||||
symbol = '🐍'
|
||||
# pyenv_version_name = true
|
||||
pyenv_prefix = 'venv'
|
||||
@@ -1,207 +0,0 @@
|
||||
@define-color window_bg_color {{colors.surface_container.default.hex}};
|
||||
@define-color accent_bg_color {{colors.primary.default.hex}};
|
||||
@define-color theme_fg_color {{colors.on_surface.default.hex}};
|
||||
@define-color error_bg_color {{colors.error.default.hex}};
|
||||
@define-color error_fg_color {{colors.on_error.default.hex}};
|
||||
|
||||
* {
|
||||
all: unset;
|
||||
}
|
||||
|
||||
popover {
|
||||
background: lighter(@window_bg_color);
|
||||
border: 1px solid darker(@accent_bg_color);
|
||||
border-radius: 18px;
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
.normal-icons {
|
||||
-gtk-icon-size: 16px;
|
||||
}
|
||||
|
||||
.large-icons {
|
||||
-gtk-icon-size: 32px;
|
||||
}
|
||||
|
||||
scrollbar {
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
.box-wrapper {
|
||||
box-shadow:
|
||||
0 19px 38px rgba(0, 0, 0, 0.3),
|
||||
0 15px 12px rgba(0, 0, 0, 0.22);
|
||||
background: @window_bg_color;
|
||||
padding: 20px;
|
||||
border-radius: 20px;
|
||||
border: 1px solid darker(@accent_bg_color);
|
||||
}
|
||||
|
||||
.preview-box,
|
||||
.elephant-hint,
|
||||
.placeholder {
|
||||
color: @theme_fg_color;
|
||||
}
|
||||
|
||||
.box {
|
||||
}
|
||||
|
||||
.search-container {
|
||||
border-radius: 10px;
|
||||
}
|
||||
|
||||
.input placeholder {
|
||||
opacity: 0.5;
|
||||
}
|
||||
|
||||
.input selection {
|
||||
background: lighter(lighter(lighter(@window_bg_color)));
|
||||
}
|
||||
|
||||
.input {
|
||||
caret-color: @theme_fg_color;
|
||||
background: lighter(@window_bg_color);
|
||||
padding: 10px;
|
||||
color: @theme_fg_color;
|
||||
}
|
||||
|
||||
.input:focus,
|
||||
.input:active {
|
||||
}
|
||||
|
||||
.content-container {
|
||||
}
|
||||
|
||||
.placeholder {
|
||||
}
|
||||
|
||||
.scroll {
|
||||
}
|
||||
|
||||
.list {
|
||||
color: @theme_fg_color;
|
||||
}
|
||||
|
||||
child {
|
||||
}
|
||||
|
||||
.item-box {
|
||||
border-radius: 10px;
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
.item-quick-activation {
|
||||
background: alpha(@accent_bg_color, 0.25);
|
||||
border-radius: 5px;
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
/* child:hover .item-box, */
|
||||
child:selected .item-box {
|
||||
background: alpha(@accent_bg_color, 0.25);
|
||||
}
|
||||
|
||||
.item-text-box {
|
||||
}
|
||||
|
||||
.item-subtext {
|
||||
font-size: 12px;
|
||||
opacity: 0.5;
|
||||
}
|
||||
|
||||
.providerlist .item-subtext {
|
||||
font-size: unset;
|
||||
opacity: 0.75;
|
||||
}
|
||||
|
||||
.item-image-text {
|
||||
font-size: 28px;
|
||||
}
|
||||
|
||||
.preview {
|
||||
border: 1px solid alpha(@accent_bg_color, 0.25);
|
||||
/* padding: 10px; */
|
||||
border-radius: 10px;
|
||||
color: @theme_fg_color;
|
||||
}
|
||||
|
||||
.calc .item-text {
|
||||
font-size: 24px;
|
||||
}
|
||||
|
||||
.calc .item-subtext {
|
||||
}
|
||||
|
||||
.symbols .item-image {
|
||||
font-size: 24px;
|
||||
}
|
||||
|
||||
.todo.done .item-text-box {
|
||||
opacity: 0.25;
|
||||
}
|
||||
|
||||
.todo.urgent {
|
||||
font-size: 24px;
|
||||
}
|
||||
|
||||
.todo.active {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.bluetooth.disconnected {
|
||||
opacity: 0.5;
|
||||
}
|
||||
|
||||
.preview .large-icons {
|
||||
-gtk-icon-size: 64px;
|
||||
}
|
||||
|
||||
.keybinds {
|
||||
padding-top: 10px;
|
||||
border-top: 1px solid lighter(@window_bg_color);
|
||||
font-size: 12px;
|
||||
color: @theme_fg_color;
|
||||
}
|
||||
|
||||
.global-keybinds {
|
||||
}
|
||||
|
||||
.item-keybinds {
|
||||
}
|
||||
|
||||
.keybind {
|
||||
}
|
||||
|
||||
.keybind-button {
|
||||
opacity: 0.5;
|
||||
}
|
||||
|
||||
.keybind-button:hover {
|
||||
opacity: 0.75;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.keybind-bind {
|
||||
text-transform: lowercase;
|
||||
opacity: 0.35;
|
||||
}
|
||||
|
||||
.keybind-label {
|
||||
padding: 2px 4px;
|
||||
border-radius: 4px;
|
||||
border: 1px solid @theme_fg_color;
|
||||
}
|
||||
|
||||
.error {
|
||||
padding: 10px;
|
||||
background: @error_bg_color;
|
||||
color: @error_fg_color;
|
||||
}
|
||||
|
||||
:not(.calc).current {
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
.preview-content.archlinuxpkgs {
|
||||
font-family: monospace;
|
||||
}
|
||||
@@ -1,7 +0,0 @@
|
||||
/*
|
||||
* Css Colors
|
||||
* Generated with Matugen
|
||||
*/
|
||||
<* for name, value in colors *>
|
||||
@define-color {{name}} {{value.default.hex}};
|
||||
<* endfor *>
|
||||
@@ -1,40 +0,0 @@
|
||||
{
|
||||
pkgs,
|
||||
inputs,
|
||||
myConfig,
|
||||
lib,
|
||||
...
|
||||
}: {
|
||||
imports = [
|
||||
inputs.stylix.homeModules.stylix
|
||||
];
|
||||
stylix = {
|
||||
autoEnable = false;
|
||||
targets = {
|
||||
firefox = {
|
||||
enable = false;
|
||||
colorTheme.enable = true;
|
||||
profileNames = [
|
||||
"hakase"
|
||||
];
|
||||
};
|
||||
waybar.enable = false;
|
||||
ghostty.enable = false;
|
||||
hyprpaper.enable = true;
|
||||
gtk.enable = true;
|
||||
};
|
||||
enable = true;
|
||||
# autoEnable = false;
|
||||
image = ../../assets/Wallpapers/${myConfig.hyprland.wallpaper};
|
||||
polarity = "dark";
|
||||
# base16Scheme = lib.mkDefault {
|
||||
# generator = "vibrant";
|
||||
# };
|
||||
iconTheme = {
|
||||
enable = true;
|
||||
package = pkgs.papirus-icon-theme; # The package to install
|
||||
dark = "Papirus-Dark"; # The theme name for dark mode
|
||||
light = "Papirus-Light"; # The theme name for light mode
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -1,14 +0,0 @@
|
||||
{
|
||||
pkgs,
|
||||
lib,
|
||||
...
|
||||
}: let
|
||||
#
|
||||
hakase-screensaver-launch = pkgs.writeShellScriptBin "hakase-cmd-screensaver" ''
|
||||
|
||||
'';
|
||||
in {
|
||||
home.packages = with pkgs; [
|
||||
hakase-screensaver-launch
|
||||
];
|
||||
}
|
||||
@@ -1,8 +0,0 @@
|
||||
{pkgs, ...}: {
|
||||
home.packages = with pkgs; [
|
||||
terminaltexteffects
|
||||
];
|
||||
home.file.".config/hakase/branding/screensaver.txt" = {
|
||||
source = ../../assets/branding.txt;
|
||||
};
|
||||
}
|
||||
@@ -1,39 +0,0 @@
|
||||
{
|
||||
inputs,
|
||||
config,
|
||||
pkgs,
|
||||
...
|
||||
}: {
|
||||
imports = [
|
||||
# ./style.nix
|
||||
];
|
||||
|
||||
programs.walker = {
|
||||
enable = true;
|
||||
runAsService = true;
|
||||
package = inputs.walker.packages.${pkgs.system}.default;
|
||||
|
||||
# CSS Implementation using Stylix Colors
|
||||
|
||||
config = {
|
||||
hide_action_hints = true;
|
||||
# icons.theme = config.gtk.iconTheme.name;
|
||||
#
|
||||
# placeholders.default = {
|
||||
# input = "Search";
|
||||
# list = "No Results";
|
||||
# };
|
||||
#
|
||||
# providers.prefixes = [
|
||||
# {
|
||||
# provider = "websearch";
|
||||
# prefix = "+";
|
||||
# }
|
||||
# {
|
||||
# provider = "providerlist";
|
||||
# prefix = "_";
|
||||
# }
|
||||
# ];
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -1,210 +0,0 @@
|
||||
{config, ...}: {
|
||||
# themes."nixos".style = ''
|
||||
# @define-color window_bg_color #1f1f28;
|
||||
# @define-color accent_bg_color #54546d;
|
||||
# @define-color theme_fg_color #f2ecbc;
|
||||
# @define-color error_bg_color #C34043;
|
||||
# @define-color error_fg_color #DCD7BA;
|
||||
#
|
||||
# * {
|
||||
# all: unset;
|
||||
# }
|
||||
#
|
||||
# popover {
|
||||
# background: lighter(@window_bg_color);
|
||||
# border: 1px solid darker(@accent_bg_color);
|
||||
# border-radius: 18px;
|
||||
# padding: 10px;
|
||||
# }
|
||||
#
|
||||
# .normal-icons {
|
||||
# -gtk-icon-size: 16px;
|
||||
# }
|
||||
#
|
||||
# .large-icons {
|
||||
# -gtk-icon-size: 32px;
|
||||
# }
|
||||
#
|
||||
# scrollbar {
|
||||
# opacity: 0;
|
||||
# }
|
||||
#
|
||||
# .box-wrapper {
|
||||
# box-shadow:
|
||||
# 0 19px 38px rgba(0, 0, 0, 0.3),
|
||||
# 0 15px 12px rgba(0, 0, 0, 0.22);
|
||||
# background: @window_bg_color;
|
||||
# padding: 20px;
|
||||
# border-radius: 20px;
|
||||
# border: 1px solid darker(@accent_bg_color);
|
||||
# }
|
||||
#
|
||||
# .preview-box,
|
||||
# .elephant-hint,
|
||||
# .placeholder {
|
||||
# color: @theme_fg_color;
|
||||
# }
|
||||
#
|
||||
# .box {
|
||||
# }
|
||||
#
|
||||
# .search-container {
|
||||
# border-radius: 10px;
|
||||
# }
|
||||
#
|
||||
# .input placeholder {
|
||||
# opacity: 0.5;
|
||||
# }
|
||||
#
|
||||
# .input selection {
|
||||
# background: lighter(lighter(lighter(@window_bg_color)));
|
||||
# }
|
||||
#
|
||||
# .input {
|
||||
# caret-color: @theme_fg_color;
|
||||
# background: lighter(@window_bg_color);
|
||||
# padding: 10px;
|
||||
# color: @theme_fg_color;
|
||||
# }
|
||||
#
|
||||
# .input:focus,
|
||||
# .input:active {
|
||||
# }
|
||||
#
|
||||
# .content-container {
|
||||
# }
|
||||
#
|
||||
# .placeholder {
|
||||
# }
|
||||
#
|
||||
# .scroll {
|
||||
# }
|
||||
#
|
||||
# .list {
|
||||
# color: @theme_fg_color;
|
||||
# }
|
||||
#
|
||||
# child {
|
||||
# }
|
||||
#
|
||||
# .item-box {
|
||||
# border-radius: 10px;
|
||||
# padding: 10px;
|
||||
# }
|
||||
#
|
||||
# .item-quick-activation {
|
||||
# background: alpha(@accent_bg_color, 0.25);
|
||||
# border-radius: 5px;
|
||||
# padding: 10px;
|
||||
# }
|
||||
#
|
||||
# /* child:hover .item-box, */
|
||||
# child:selected .item-box {
|
||||
# background: alpha(@accent_bg_color, 0.25);
|
||||
# }
|
||||
#
|
||||
# .item-text-box {
|
||||
# }
|
||||
#
|
||||
# .item-subtext {
|
||||
# font-size: 12px;
|
||||
# opacity: 0.5;
|
||||
# }
|
||||
#
|
||||
# .providerlist .item-subtext {
|
||||
# font-size: unset;
|
||||
# opacity: 0.75;
|
||||
# }
|
||||
#
|
||||
# .item-image-text {
|
||||
# font-size: 28px;
|
||||
# }
|
||||
#
|
||||
# .preview {
|
||||
# border: 1px solid alpha(@accent_bg_color, 0.25);
|
||||
# /* padding: 10px; */
|
||||
# border-radius: 10px;
|
||||
# color: @theme_fg_color;
|
||||
# }
|
||||
#
|
||||
# .calc .item-text {
|
||||
# font-size: 24px;
|
||||
# }
|
||||
#
|
||||
# .calc .item-subtext {
|
||||
# }
|
||||
#
|
||||
# .symbols .item-image {
|
||||
# font-size: 24px;
|
||||
# }
|
||||
#
|
||||
# .todo.done .item-text-box {
|
||||
# opacity: 0.25;
|
||||
# }
|
||||
#
|
||||
# .todo.urgent {
|
||||
# font-size: 24px;
|
||||
# }
|
||||
#
|
||||
# .todo.active {
|
||||
# font-weight: bold;
|
||||
# }
|
||||
#
|
||||
# .bluetooth.disconnected {
|
||||
# opacity: 0.5;
|
||||
# }
|
||||
#
|
||||
# .preview .large-icons {
|
||||
# -gtk-icon-size: 64px;
|
||||
# }
|
||||
#
|
||||
# .keybinds {
|
||||
# padding-top: 10px;
|
||||
# border-top: 1px solid lighter(@window_bg_color);
|
||||
# font-size: 12px;
|
||||
# color: @theme_fg_color;
|
||||
# }
|
||||
#
|
||||
# .global-keybinds {
|
||||
# }
|
||||
#
|
||||
# .item-keybinds {
|
||||
# }
|
||||
#
|
||||
# .keybind {
|
||||
# }
|
||||
#
|
||||
# .keybind-button {
|
||||
# opacity: 0.5;
|
||||
# }
|
||||
#
|
||||
# .keybind-button:hover {
|
||||
# opacity: 0.75;
|
||||
# cursor: pointer;
|
||||
# }
|
||||
#
|
||||
# .keybind-bind {
|
||||
# text-transform: lowercase;
|
||||
# opacity: 0.35;
|
||||
# }
|
||||
#
|
||||
# .keybind-label {
|
||||
# padding: 2px 4px;
|
||||
# border-radius: 4px;
|
||||
# border: 1px solid @theme_fg_color;
|
||||
# }
|
||||
#
|
||||
# .error {
|
||||
# padding: 10px;
|
||||
# background: @error_bg_color;
|
||||
# color: @error_fg_color;
|
||||
# }
|
||||
#
|
||||
# :not(.calc).current {
|
||||
# font-style: italic;
|
||||
# }
|
||||
#
|
||||
# .preview-content.archlinuxpkgs {
|
||||
# font-family: monospace;
|
||||
# } '';
|
||||
}
|
||||
@@ -1,169 +0,0 @@
|
||||
{pkgs, ...}: let
|
||||
# 1. The Brain: Logic to find a window or launch a new one
|
||||
hakase-launch-or-focus = pkgs.writeShellScriptBin "hakase-launch-or-focus" ''
|
||||
if (($# == 0)); then
|
||||
echo "Usage: hakase-launch-or-focus [window-pattern] [launch-command]"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
WINDOW_PATTERN="$1"
|
||||
# Escaped Nix interpolation for shell default value logic
|
||||
LAUNCH_COMMAND="''${2:-"uwsm-app -- $WINDOW_PATTERN"}"
|
||||
|
||||
# Locate window address via hyprctl and jq
|
||||
WINDOW_ADDRESS=$(${pkgs.hyprland}/bin/hyprctl clients -j | ${pkgs.jq}/bin/jq -r --arg p "$WINDOW_PATTERN" \
|
||||
'.[] | select((.class | test("\\b" + $p + "\\b"; "i")) or (.title | test("\\b" + $p + "\\b"; "i"))) | .address' | head -n1)
|
||||
|
||||
if [[ -n $WINDOW_ADDRESS ]]; then
|
||||
# If found, focus the existing window
|
||||
${pkgs.hyprland}/bin/hyprctl dispatch focuswindow "address:$WINDOW_ADDRESS"
|
||||
else
|
||||
# If not found, execute the launch command
|
||||
eval exec setsid $LAUNCH_COMMAND
|
||||
fi
|
||||
'';
|
||||
|
||||
hakase-launch-tui = pkgs.writeShellScriptBin "hakase-launch-tui" ''
|
||||
APP_NAME=$(basename "$1")
|
||||
# Using org.hakase prefix so the focus script can find it via class name
|
||||
exec setsid uwsm-app -- xdg-terminal-exec --app-id=org.hakase."$APP_NAME" -e "$@"
|
||||
'';
|
||||
|
||||
hakase-focus-wrapper = pkgs.writeShellScriptBin "hakase-focus-wrapper" ''
|
||||
APP_NAME=$(basename "$1")
|
||||
WINDOW_PATTERN="org.hakase.$APP_NAME"
|
||||
LAUNCH_CMD="hakase-launch-tui $*"
|
||||
|
||||
exec hakase-launch-or-focus "$WINDOW_PATTERN" "$LAUNCH_CMD"
|
||||
'';
|
||||
|
||||
hakase-launch-wifi = pkgs.writeShellScriptBin "hakase-launch-wifi" ''
|
||||
# Unblock the WiFi radio (requires appropriate user groups/permissions)
|
||||
# ${pkgs.util-linux}/bin/rfkill unblock wifi
|
||||
|
||||
# Use the focus wrapper to launch or switch to Impala
|
||||
exec hakase-focus-wrapper impala
|
||||
'';
|
||||
|
||||
hakase-launch-bluetooth =
|
||||
pkgs.writeShellScriptBin "hakase-launch-bluetooth"
|
||||
''
|
||||
# ${pkgs.util-linux}/bin/rfkill unblock wifi
|
||||
exec hakase-focus-wrapper bluetui
|
||||
|
||||
'';
|
||||
hakase-launch-popup = pkgs.writeShellScriptBin "hakase-launch-popup" ''
|
||||
if (($# < 3)); then
|
||||
echo "Usage: hakase-launch-popup [width] [height] [command...]"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# --- ARGS & CONFIG ---
|
||||
WIN_WIDTH="$1"
|
||||
WIN_HEIGHT="$2"
|
||||
shift 2
|
||||
|
||||
MARGIN=10
|
||||
BAR_HEIGHT=40
|
||||
# ---------------------
|
||||
|
||||
CMD_NAME=$(basename "$1")
|
||||
TARGET_CLASS="org.hakase.popup.$CMD_NAME"
|
||||
|
||||
# 1. SINGLETON LOGIC: Check for ANY existing hakase popup
|
||||
# We look for any client with a class starting with "org.hakase.popup."
|
||||
EXISTING_JSON=$(${pkgs.hyprland}/bin/hyprctl clients -j | ${pkgs.jq}/bin/jq -r '.[] | select(.class | startswith("org.hakase.popup."))')
|
||||
|
||||
if [[ -n "$EXISTING_JSON" ]]; then
|
||||
OLD_ADDR=$(echo "$EXISTING_JSON" | ${pkgs.jq}/bin/jq -r '.address')
|
||||
OLD_CLASS=$(echo "$EXISTING_JSON" | ${pkgs.jq}/bin/jq -r '.class')
|
||||
|
||||
# Close the existing popup
|
||||
${pkgs.hyprland}/bin/hyprctl dispatch closewindow "address:$OLD_ADDR"
|
||||
|
||||
# If the existing popup was the SAME one we are trying to launch, we are done (Toggle Off behavior)
|
||||
if [[ "$OLD_CLASS" == "$TARGET_CLASS" ]]; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# If it was a different popup, wait a tiny bit for Hyprland to process the close
|
||||
# This prevents the new window from "merging" with the closing animation of the old one
|
||||
sleep 0.15
|
||||
fi
|
||||
|
||||
# 2. Calculate Geometry (Standard logic)
|
||||
MONITOR_INFO=$(${pkgs.hyprland}/bin/hyprctl monitors -j | ${pkgs.jq}/bin/jq '.[] | select(.focused == true)')
|
||||
MON_X=$(echo "$MONITOR_INFO" | ${pkgs.jq}/bin/jq '.x')
|
||||
MON_Y=$(echo "$MONITOR_INFO" | ${pkgs.jq}/bin/jq '.y')
|
||||
MON_WIDTH=$(echo "$MONITOR_INFO" | ${pkgs.jq}/bin/jq '.width')
|
||||
|
||||
TARGET_X=$((MON_X + MON_WIDTH - WIN_WIDTH - MARGIN))
|
||||
TARGET_Y=$((MON_Y + BAR_HEIGHT + MARGIN))
|
||||
|
||||
# 3. Launch with Rules
|
||||
RULE="[float;pin;size $WIN_WIDTH $WIN_HEIGHT;move $TARGET_X $TARGET_Y]"
|
||||
${pkgs.hyprland}/bin/hyprctl dispatch exec "$RULE xdg-terminal-exec --app-id=$TARGET_CLASS -e $@"
|
||||
|
||||
# 4. Background Listener (Close on Blur)
|
||||
(
|
||||
TIMEOUT=0
|
||||
WINDOW_ADDR=""
|
||||
while [[ -z "$WINDOW_ADDR" && $TIMEOUT -lt 20 ]]; do
|
||||
sleep 0.1
|
||||
WINDOW_ADDR=$(${pkgs.hyprland}/bin/hyprctl clients -j | ${pkgs.jq}/bin/jq -r --arg c "$TARGET_CLASS" '.[] | select(.class == $c) | .address')
|
||||
((TIMEOUT++))
|
||||
done
|
||||
|
||||
if [[ -n "$WINDOW_ADDR" ]]; then
|
||||
${pkgs.socat}/bin/socat -U - UNIX-CONNECT:"$XDG_RUNTIME_DIR/hypr/$HYPRLAND_INSTANCE_SIGNATURE/.socket2.sock" | while read -r line; do
|
||||
if [[ "$line" == "activewindow>>"* ]]; then
|
||||
NEW_FOCUS="0x$(echo "$line" | cut -d '>' -f3 | cut -d ',' -f1)"
|
||||
# If focus is lost to another window, close this popup
|
||||
if [[ "$WINDOW_ADDR" != "$NEW_FOCUS" ]]; then
|
||||
${pkgs.hyprland}/bin/hyprctl dispatch closewindow "address:$WINDOW_ADDR"
|
||||
break
|
||||
fi
|
||||
fi
|
||||
done
|
||||
fi
|
||||
) &
|
||||
|
||||
exit 0
|
||||
'';
|
||||
|
||||
# 1. WiFi (Impala) - Requires a larger view
|
||||
hakase-popup-wifi = pkgs.writeShellScriptBin "hakase-popup-wifi" ''
|
||||
exec hakase-launch-popup 800 500 impala
|
||||
'';
|
||||
|
||||
# 2. Bluetooth (Bluetui) - Fits your specific test size
|
||||
hakase-popup-bluetooth = pkgs.writeShellScriptBin "hakase-popup-bluetooth" ''
|
||||
exec hakase-launch-popup 600 500 bluetui
|
||||
'';
|
||||
|
||||
# 3. Volume (Wiremix) - Can be smaller
|
||||
hakase-popup-volume = pkgs.writeShellScriptBin "hakase-popup-volume" ''
|
||||
exec hakase-launch-popup 800 300 wiremix
|
||||
'';
|
||||
in {
|
||||
home.packages = [
|
||||
pkgs.jq
|
||||
pkgs.socat # Required for the socket listener
|
||||
pkgs.util-linux
|
||||
pkgs.bluetui
|
||||
pkgs.impala
|
||||
pkgs.wiremix
|
||||
pkgs.pamixer
|
||||
|
||||
hakase-launch-popup
|
||||
hakase-popup-wifi
|
||||
hakase-popup-bluetooth
|
||||
hakase-popup-volume
|
||||
|
||||
hakase-launch-or-focus
|
||||
hakase-launch-tui
|
||||
hakase-focus-wrapper
|
||||
hakase-launch-wifi
|
||||
hakase-launch-bluetooth
|
||||
];
|
||||
}
|
||||
@@ -1,171 +0,0 @@
|
||||
{
|
||||
config,
|
||||
pkgs,
|
||||
myConfig,
|
||||
...
|
||||
}: {
|
||||
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 = "";
|
||||
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 = "hakase-focus-wrapper btop";
|
||||
on-click-right = "xdg-terminal-exec";
|
||||
};
|
||||
|
||||
"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 = "hakase-popup-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 = "hakase-popup-bluetooth";
|
||||
};
|
||||
|
||||
"pulseaudio" = {
|
||||
format = "{icon}";
|
||||
on-click = "hakase-popup-volume";
|
||||
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;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -1,88 +0,0 @@
|
||||
{config, ...}: {
|
||||
programs.waybar = {
|
||||
style = ''
|
||||
@import "matugen.css";
|
||||
* {
|
||||
background-color: @background;
|
||||
color: @on_surface;
|
||||
|
||||
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: @on_secondary;
|
||||
}
|
||||
'';
|
||||
};
|
||||
}
|
||||
@@ -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";
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
|
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 +0,0 @@
|
||||
/nix/store/yckzy9k5i7pvmlk6xjkdj4wwbfms1zpl-home-manager-files/Pictures/Wallpapers/1-everforest.jpg
|
||||
|
Before Width: | Height: | Size: 28 KiB |
|
Before Width: | Height: | Size: 510 KiB |
|
Before Width: | Height: | Size: 451 KiB |
|
Before Width: | Height: | Size: 488 KiB |
@@ -1 +0,0 @@
|
||||
/nix/store/yckzy9k5i7pvmlk6xjkdj4wwbfms1zpl-home-manager-files/Pictures/Wallpapers/gruvbox-1.jpg
|
||||
@@ -1 +0,0 @@
|
||||
/nix/store/yckzy9k5i7pvmlk6xjkdj4wwbfms1zpl-home-manager-files/Pictures/Wallpapers/kanagawa-1.png
|
||||
|
Before Width: | Height: | Size: 607 KiB |
|
Before Width: | Height: | Size: 6.0 MiB |
|
Before Width: | Height: | Size: 152 KiB |
@@ -1 +0,0 @@
|
||||
/nix/store/yckzy9k5i7pvmlk6xjkdj4wwbfms1zpl-home-manager-files/Pictures/Wallpapers/nord-1.png
|
||||
@@ -1,10 +0,0 @@
|
||||
▄▄▄
|
||||
▄█████▄ ▄███████████▄ ▄███████ ▄███████ ▄███████ ▄█ █▄ ▄█ █▄
|
||||
███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███
|
||||
███ ███ ███ ███ ███ ███ ███ ███ ███ ███ █▀ ███ ███ ███ ███
|
||||
███ ███ ███ ███ ███ ▄███▄▄▄███ ▄███▄▄▄██▀ ███ ▄███▄▄▄███▄ ███▄▄▄███
|
||||
███ ███ ███ ███ ███ ▀███▀▀▀███ ▀███▀▀▀▀ ███ ▀▀███▀▀▀███ ▀▀▀▀▀▀███
|
||||
███ ███ ███ ███ ███ ███ ███ ██████████ ███ █▄ ███ ███ ▄██ ███
|
||||
███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███
|
||||
▀█████▀ ▀█ ███ █▀ ███ █▀ ███ ███ ███████▀ ███ █▀ ▀█████▀
|
||||
███ █▀
|
||||
@@ -1,61 +1,88 @@
|
||||
{
|
||||
myConfig = {
|
||||
nixos = {
|
||||
username = "kenji";
|
||||
hostname = "hakase";
|
||||
timezone = "America/Chicago";
|
||||
shell = "fish"; # FIXME: unassigned variable
|
||||
macos = {
|
||||
Username = "lsoriano";
|
||||
};
|
||||
git = {
|
||||
username = "kenji";
|
||||
email = "kenji@hakase";
|
||||
defaultBranch = "master";
|
||||
essentials = {
|
||||
# !!! replace it with your own, else system might malfunction.
|
||||
Username = "kenji";
|
||||
};
|
||||
general = {
|
||||
Terminal = {
|
||||
font = "JetBrainsMono Nerd Font";
|
||||
size = "18";
|
||||
shell = "fish"; # or zsh
|
||||
aliases = {};
|
||||
};
|
||||
allowUnfree = true;
|
||||
};
|
||||
ssh = {
|
||||
# FIXME: anonymize
|
||||
extraConfig = ''
|
||||
Host macair
|
||||
User biscuit
|
||||
HostName 192.168.68.81
|
||||
|
||||
Host gitea.sakamoto.dev
|
||||
User kenji
|
||||
ProxyCommand cloudflared access ssh --hostname %h
|
||||
HostName gitea.sakamoto.dev
|
||||
'';
|
||||
};
|
||||
terminal = {
|
||||
default = "ghostty";
|
||||
aliases = {
|
||||
update = "sudo nixos-rebuild switch --flake ~/.config/nixos/#hakase";
|
||||
nixos = {
|
||||
Hostname = "hakase";
|
||||
Timezone = "America/Chicago";
|
||||
enableSteamOS = false;
|
||||
|
||||
Boot = {
|
||||
mode = "systemd"; # systemd or grub
|
||||
};
|
||||
Apps = {
|
||||
packages = pkgs:
|
||||
with pkgs; [
|
||||
adwaita-icon-theme
|
||||
jellyfin-media-player
|
||||
delfin
|
||||
goverlay
|
||||
geekbench_6
|
||||
gparted
|
||||
ntfs3g
|
||||
feishin
|
||||
discord
|
||||
xfce.thunar
|
||||
];
|
||||
};
|
||||
Hyprland = {
|
||||
monitors = [
|
||||
# "DP-2, highres@165,0x1080,1,vrr,1"
|
||||
# "DP-2, highres@180,0x1080,1,cm,hdr, sdrbrightness, 1.5, sdrsaturation, 0.98"
|
||||
"DP-2, highres@180,0x1080,1,bitdepth,10,cm,hdr,sdrbrightness,1.4,sdrsaturation,0.98"
|
||||
"DP-1, highres@highrr,760x0,1"
|
||||
"HDMI-A-1, 1920x1080@120, 20000x20000,1"
|
||||
# "HDMI-A-1, disabled"
|
||||
];
|
||||
};
|
||||
Git = {
|
||||
user = "kenji";
|
||||
email = "kenji@hakase";
|
||||
defaultBranch = "master";
|
||||
};
|
||||
};
|
||||
hyprland = {
|
||||
monitors = ["HDMI-A-1, 1920x1080@120, auto, 1"];
|
||||
# wallpaper = "nixos_rainbow.png";
|
||||
wallpaper = "firewatch_dusk.jpg";
|
||||
};
|
||||
firefox = {
|
||||
bookmarks = [
|
||||
{
|
||||
name = "Home Manager";
|
||||
url = "https://mynixos.com/home-manager/options/programs";
|
||||
}
|
||||
{
|
||||
name = "YouTube";
|
||||
url = "https://youtube.com";
|
||||
}
|
||||
{
|
||||
name = "Nur";
|
||||
url = "https://nur.nix-community.org/repos";
|
||||
}
|
||||
];
|
||||
newtabpage = [
|
||||
{
|
||||
title = "Dashboard";
|
||||
url = "https://dash.sakamoto.dev";
|
||||
}
|
||||
];
|
||||
optionals = {
|
||||
Builds = {
|
||||
trustedUsers = [
|
||||
"@groups"
|
||||
];
|
||||
buildMachines = [
|
||||
{
|
||||
hostName = "";
|
||||
sshUser = "";
|
||||
sshKey = "";
|
||||
system = "";
|
||||
supportedFeatures = ["apple-virt" "big-parallel" "kvm" "nixos-test"];
|
||||
}
|
||||
];
|
||||
};
|
||||
Ssh = {
|
||||
extraConfig = ''
|
||||
Host macair
|
||||
User biscuit
|
||||
HostName 192.168.68.81
|
||||
|
||||
Host gitea.sakamoto.dev
|
||||
User kenji
|
||||
ProxyCommand cloudflared access ssh --hostname %h
|
||||
HostName gitea.sakamoto.dev
|
||||
'';
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
@@ -1,37 +1,56 @@
|
||||
{
|
||||
description = "Hakase Configuration";
|
||||
description = "A rewrite of the original Sakamoto NixOS config.";
|
||||
|
||||
inputs = {
|
||||
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
||||
elephant.url = "github:abenz1267/elephant";
|
||||
flake-utils.url = "github:numtide/flake-utils";
|
||||
chaotic.url = "github:chaotic-cx/nyx/nyxpkgs-unstable";
|
||||
textfox.url = "github:adriankarlen/textfox";
|
||||
nur.url = "github:nix-community/NUR";
|
||||
|
||||
jovian = {
|
||||
url = "github:Jovian-Experiments/Jovian-NixOS";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
|
||||
matugen = {
|
||||
url = "github:/InioX/Matugen";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
# ref = "refs/tags/matugen-v0.10.0";
|
||||
};
|
||||
|
||||
erosanix = {
|
||||
url = "github:emmanuelrosa/erosanix";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
|
||||
hyprland = {
|
||||
url = "git+https://github.com/hyprwm/Hyprland?submodules=1";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
|
||||
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";
|
||||
};
|
||||
stylix = {
|
||||
url = "github:nix-community/stylix";
|
||||
|
||||
darwin = {
|
||||
url = "github:lnl7/nix-darwin";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
|
||||
walker = {
|
||||
url = "github:abenz1267/walker";
|
||||
inputs.elephant.follows = "elephant";
|
||||
nixovim = {
|
||||
url = "git+https://git.sakamoto.dev/kenji/nixovim.git";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
|
||||
illogical-impulse = {
|
||||
url = "git+https://git.sakamoto.dev/kenji/illogical-impulse.git";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
|
||||
omarchy-nix = {
|
||||
url = "git+https://git.sakamoto.dev/kenji/omarchy-nix.git";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
inputs.home-manager.follows = "home-manager";
|
||||
};
|
||||
};
|
||||
|
||||
@@ -39,11 +58,13 @@
|
||||
self,
|
||||
nixpkgs,
|
||||
home-manager,
|
||||
stylix,
|
||||
nixovim,
|
||||
darwin,
|
||||
chaotic,
|
||||
sops-nix,
|
||||
textfox,
|
||||
jovian,
|
||||
nixovim,
|
||||
illogical-impulse,
|
||||
erosanix,
|
||||
omarchy-nix,
|
||||
...
|
||||
} @ inputs: let
|
||||
config = import ./config.nix;
|
||||
@@ -58,12 +79,67 @@
|
||||
hakase = nixpkgs.lib.nixosSystem {
|
||||
specialArgs = args;
|
||||
modules = [
|
||||
home-manager.nixosModules.home-manager
|
||||
sops-nix.nixosModules.sops
|
||||
chaotic.nixosModules.default
|
||||
home-manager.nixosModules.home-manager
|
||||
jovian.nixosModules.default
|
||||
erosanix.nixosModules.protonvpn
|
||||
./hosts/hakase/configuration.nix
|
||||
];
|
||||
};
|
||||
hakase-omarchy = nixpkgs.lib.nixosSystem {
|
||||
specialArgs = args;
|
||||
modules = [
|
||||
chaotic.nixosModules.default
|
||||
omarchy-nix.nixosModules.default
|
||||
home-manager.nixosModules.home-manager
|
||||
./hosts/hakase-omarchy/configuration.nix
|
||||
];
|
||||
};
|
||||
vanilla = nixpkgs.lib.nixosSystem {
|
||||
specialArgs = args;
|
||||
modules = [
|
||||
./hosts/vanilla/configuration.nix
|
||||
# nixovim.packages.${system}.full
|
||||
];
|
||||
};
|
||||
};
|
||||
|
||||
homeConfigurations = {
|
||||
hakase = home-manager.lib.homeManagerConfiguration {
|
||||
pkgs = import nixpkgs {
|
||||
config.allowUnfree = true;
|
||||
extraSpecialArgs = args;
|
||||
};
|
||||
modules = [
|
||||
home-manager.nixosModules.home-manager
|
||||
./home/hakase.nix
|
||||
];
|
||||
};
|
||||
hakase-omarchy = home-manager.lib.homeManagerConfiguration {
|
||||
pkgs = import nixpkgs {
|
||||
config.allowUnfree = true;
|
||||
extraSpecialArgs = args;
|
||||
};
|
||||
modules = [
|
||||
home-manager.nixosModules.home-manager
|
||||
./home/hakase-omarchy.nix
|
||||
];
|
||||
};
|
||||
};
|
||||
darwinConfigurations = {
|
||||
macos = darwin.lib.darwinSystem {
|
||||
system = "aarch64-darwin";
|
||||
specialArgs =
|
||||
{
|
||||
inherit inputs;
|
||||
system = "aarch64-darwin";
|
||||
}
|
||||
// config;
|
||||
modules = [
|
||||
home-manager.darwinModules.home-manager
|
||||
./hosts/macos/darwin.nix
|
||||
];
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
{
|
||||
config,
|
||||
pkgs,
|
||||
inputs,
|
||||
...
|
||||
}: {
|
||||
imports = [
|
||||
../modules/home/terminal.nix
|
||||
];
|
||||
|
||||
programs.home-manager.enable = true;
|
||||
|
||||
home.packages = [];
|
||||
home.stateVersion = "25.11";
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
{
|
||||
config,
|
||||
pkgs,
|
||||
inputs,
|
||||
...
|
||||
}: {
|
||||
imports = [
|
||||
# ... your other imports
|
||||
inputs.omarchy-nix.homeManagerModules.default # Assuming you have a system module too
|
||||
];
|
||||
|
||||
# ADD THIS BLOCK
|
||||
|
||||
home.stateVersion = "25.05";
|
||||
}
|
||||
@@ -2,17 +2,16 @@
|
||||
pkgs,
|
||||
inputs,
|
||||
...
|
||||
}: {
|
||||
}: let
|
||||
info = import ../config.nix;
|
||||
in {
|
||||
imports = [
|
||||
# inputs.chaotic.homeManagerModules.default
|
||||
../modules/home/desktop.nix
|
||||
../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
|
||||
../modules/home/gaming.nix
|
||||
inputs.walker.homeManagerModules.default
|
||||
];
|
||||
|
||||
# nix.package = pkgs.nix;
|
||||
home.packages = info.myConfig.nixos.Apps.packages pkgs;
|
||||
home.stateVersion = "25.05";
|
||||
}
|
||||
|
||||
@@ -0,0 +1,156 @@
|
||||
{
|
||||
pkgs,
|
||||
myConfig,
|
||||
specialArgs,
|
||||
...
|
||||
}: {
|
||||
imports = [
|
||||
../../modules/default/boot.nix
|
||||
./hardware-configuration.nix
|
||||
];
|
||||
|
||||
system.stateVersion = "25.05";
|
||||
|
||||
i18n.defaultLocale = "en_US.UTF-8";
|
||||
time.timeZone = "${myConfig.nixos.Timezone}";
|
||||
nixpkgs.config.allowUnfree = myConfig.general.allowUnfree;
|
||||
|
||||
console = {
|
||||
earlySetup = false;
|
||||
font = "${pkgs.terminus_font}/share/consolefonts/ter-132n.psf.gz";
|
||||
packages = with pkgs; [terminus_font];
|
||||
useXkbConfig = true;
|
||||
};
|
||||
|
||||
users = {
|
||||
# defaultUserShell = pkgs.${myConfig.general.Terminal.shell};
|
||||
users = {
|
||||
${myConfig.essentials.Username} = {
|
||||
isNormalUser = true;
|
||||
extraGroups = ["wheel" "networkmanager" "input" "video"];
|
||||
initialHashedPassword = "$y$j9T$NHFtSwF4NJtEmgMjy4Xdg.$9WQltjEx3eEfZ7GbpGLW8lBhJtiXPOeIawrxdmx0.vB";
|
||||
useDefaultShell = true;
|
||||
packages = [];
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
omarchy = {
|
||||
full_name = "${myConfig.essentials.Username}"; # Or variable
|
||||
email_address = "${myConfig.nixos.Git.email}";
|
||||
};
|
||||
|
||||
home-manager = {
|
||||
backupFileExtension = "backup";
|
||||
useGlobalPkgs = true;
|
||||
useUserPackages = true;
|
||||
extraSpecialArgs = specialArgs;
|
||||
users.${myConfig.essentials.Username} = import ../../home/hakase-omarchy.nix;
|
||||
};
|
||||
networking = {
|
||||
useDHCP = false;
|
||||
wireless = {
|
||||
enable = false;
|
||||
};
|
||||
|
||||
networkmanager.enable = true;
|
||||
firewall = {
|
||||
enable = true;
|
||||
allowedTCPPorts = [22 80 531];
|
||||
allowedUDPPorts = [53 531 5353];
|
||||
};
|
||||
proxy = {
|
||||
default = null;
|
||||
noProxy = null;
|
||||
};
|
||||
};
|
||||
|
||||
systemd = {
|
||||
# network.enable = true;
|
||||
# extraConfig = "DefaultTimeoutStopSec=5s";
|
||||
};
|
||||
|
||||
nix = {
|
||||
settings = {
|
||||
experimental-features = ["nix-command" "flakes"];
|
||||
};
|
||||
};
|
||||
#
|
||||
# hardware = {
|
||||
# enableAllFirmware = true;
|
||||
# logitech.wireless.enable = true;
|
||||
#
|
||||
# bluetooth = {
|
||||
# enable = true;
|
||||
# powerOnBoot = true;
|
||||
# settings = {
|
||||
# General = {
|
||||
# # AutoEnable = true;
|
||||
# Experimental = true;
|
||||
# MultiProfile = "multiple";
|
||||
# FastConnectable = true;
|
||||
# # ControllerMode = "bredr";
|
||||
# };
|
||||
# Policy = {
|
||||
# AutoEnable = true;
|
||||
# };
|
||||
# };
|
||||
# };
|
||||
#
|
||||
# graphics = {
|
||||
# enable = true;
|
||||
# enable32Bit = true;
|
||||
# };
|
||||
#
|
||||
# xone.enable = true;
|
||||
# };
|
||||
#
|
||||
|
||||
# security.rtkit.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
|
||||
# '';
|
||||
# zsh.enable = true;
|
||||
# fish.enable = true;
|
||||
#
|
||||
# appimage = {
|
||||
# enable = true;
|
||||
# binfmt = true;
|
||||
# };
|
||||
#
|
||||
# ssh.extraConfig = myConfig.optionals.Ssh.extraConfig;
|
||||
# };
|
||||
|
||||
# jovian.steamos.enableMesaPatches = true;
|
||||
#
|
||||
# services = {
|
||||
# displayManager.sessionPackages = [
|
||||
# inputs.hyprland.packages.${pkgs.stdenv.hostPlatform.system}.hyprland
|
||||
# ];
|
||||
#
|
||||
# getty.autologinUser = lib.mkOverride 10 "${myConfig.essentials.Username}";
|
||||
#
|
||||
# flatpak.enable = true;
|
||||
# seatd.enable = true;
|
||||
# upower.enable = true;
|
||||
# scx.enable = true;
|
||||
# libinput.enable = true;
|
||||
# blueman.enable = true;
|
||||
# printing.enable = true;
|
||||
# openssh.enable = true;
|
||||
#
|
||||
# pipewire = {
|
||||
# enable = true;
|
||||
# alsa = {
|
||||
# enable = true;
|
||||
# support32Bit = true;
|
||||
# };
|
||||
# pulse.enable = true;
|
||||
# };
|
||||
# };
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
# 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" "usb_storage" "sd_mod" ];
|
||||
boot.initrd.kernelModules = [ ];
|
||||
boot.kernelModules = [ "kvm-amd" ];
|
||||
boot.extraModulePackages = [ ];
|
||||
|
||||
fileSystems."/" =
|
||||
{ device = "/dev/mapper/luks-9091013c-0763-40a6-8316-d44d52df3530";
|
||||
fsType = "ext4";
|
||||
};
|
||||
|
||||
boot.initrd.luks.devices."luks-9091013c-0763-40a6-8316-d44d52df3530".device = "/dev/disk/by-uuid/9091013c-0763-40a6-8316-d44d52df3530";
|
||||
|
||||
fileSystems."/boot" =
|
||||
{ device = "/dev/disk/by-uuid/B332-BF84";
|
||||
fsType = "vfat";
|
||||
options = [ "fmask=0077" "dmask=0077" ];
|
||||
};
|
||||
|
||||
swapDevices = [ ];
|
||||
|
||||
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
|
||||
hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
|
||||
}
|
||||
@@ -1,13 +1,174 @@
|
||||
{
|
||||
pkgs,
|
||||
myConfig,
|
||||
inputs,
|
||||
lib,
|
||||
specialArgs,
|
||||
...
|
||||
}: {
|
||||
imports = [
|
||||
./hardware-configuration.nix
|
||||
../../modules/system/default.nix
|
||||
../../modules/system/hyprland.nix
|
||||
../../modules/system/scripts.nix
|
||||
../../modules/system/gaming.nix
|
||||
];
|
||||
imports =
|
||||
[
|
||||
./hardware-configuration.nix
|
||||
../../modules/default/apps.nix
|
||||
../../modules/default/desktop.nix
|
||||
../../modules/default/remote.nix
|
||||
../../modules/default/gaming.nix
|
||||
../../modules/default/udev.nix
|
||||
../../modules/default/boot.nix
|
||||
../../modules/default/dev.nix
|
||||
../../modules/default/security.nix
|
||||
]
|
||||
++ lib.optionals (myConfig.nixos.enableSteamOS == false) [
|
||||
../../modules/default/login.nix
|
||||
];
|
||||
|
||||
system.stateVersion = "25.05";
|
||||
|
||||
i18n.defaultLocale = "en_US.UTF-8";
|
||||
time.timeZone = "${myConfig.nixos.Timezone}";
|
||||
|
||||
console = {
|
||||
earlySetup = false;
|
||||
font = "${pkgs.terminus_font}/share/consolefonts/ter-132n.psf.gz";
|
||||
packages = with pkgs; [terminus_font];
|
||||
useXkbConfig = true;
|
||||
};
|
||||
|
||||
users = {
|
||||
defaultUserShell = pkgs.${myConfig.general.Terminal.shell};
|
||||
users = {
|
||||
${myConfig.essentials.Username} = {
|
||||
isNormalUser = true;
|
||||
extraGroups = ["wheel" "networkmanager" "input" "video"];
|
||||
initialHashedPassword = "$y$j9T$NHFtSwF4NJtEmgMjy4Xdg.$9WQltjEx3eEfZ7GbpGLW8lBhJtiXPOeIawrxdmx0.vB";
|
||||
useDefaultShell = true;
|
||||
packages = [];
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
home-manager = {
|
||||
backupFileExtension = "backup";
|
||||
useGlobalPkgs = true;
|
||||
useUserPackages = true;
|
||||
extraSpecialArgs = specialArgs;
|
||||
users.${myConfig.essentials.Username} = import ../../home/hakase.nix;
|
||||
};
|
||||
|
||||
nixpkgs.config.allowUnfree = myConfig.general.allowUnfree;
|
||||
|
||||
nix = {
|
||||
distributedBuilds = true;
|
||||
settings = {
|
||||
builders-use-substitutes = true;
|
||||
trusted-users = myConfig.optionals.Builds.trustedUsers;
|
||||
experimental-features = ["nix-command" "flakes"];
|
||||
};
|
||||
};
|
||||
|
||||
hardware = {
|
||||
enableAllFirmware = true;
|
||||
logitech.wireless.enable = true;
|
||||
|
||||
bluetooth = {
|
||||
enable = true;
|
||||
powerOnBoot = true;
|
||||
settings = {
|
||||
General = {
|
||||
Enable = "Source,Sink,Media,Socket";
|
||||
# AutoEnable = true;
|
||||
Experimental = true;
|
||||
MultiProfile = "multiple";
|
||||
FastConnectable = true;
|
||||
# ControllerMode = "bredr";
|
||||
};
|
||||
Policy = {
|
||||
AutoEnable = true;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
graphics = {
|
||||
enable = true;
|
||||
enable32Bit = true;
|
||||
};
|
||||
|
||||
xone.enable = true;
|
||||
};
|
||||
|
||||
networking = {
|
||||
useDHCP = false;
|
||||
wireless = {
|
||||
enable = false;
|
||||
};
|
||||
|
||||
networkmanager.enable = true;
|
||||
firewall = {
|
||||
enable = true;
|
||||
allowedTCPPorts = [22 80];
|
||||
allowedUDPPorts = [53];
|
||||
};
|
||||
proxy = {
|
||||
default = null;
|
||||
noProxy = null;
|
||||
};
|
||||
};
|
||||
|
||||
systemd = {
|
||||
# network.enable = true;
|
||||
# extraConfig = "DefaultTimeoutStopSec=5s";
|
||||
};
|
||||
|
||||
security.rtkit.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
|
||||
'';
|
||||
zsh.enable = true;
|
||||
fish.enable = true;
|
||||
|
||||
appimage = {
|
||||
enable = true;
|
||||
binfmt = true;
|
||||
};
|
||||
|
||||
ssh.extraConfig = myConfig.optionals.Ssh.extraConfig;
|
||||
};
|
||||
|
||||
# jovian.steamos.enableMesaPatches = true;
|
||||
|
||||
services = {
|
||||
displayManager.sessionPackages = [
|
||||
inputs.hyprland.packages.${pkgs.stdenv.hostPlatform.system}.hyprland
|
||||
];
|
||||
|
||||
getty.autologinUser = lib.mkOverride 10 "${myConfig.essentials.Username}";
|
||||
|
||||
flatpak.enable = true;
|
||||
seatd.enable = true;
|
||||
upower.enable = true;
|
||||
scx.enable = true;
|
||||
libinput.enable = true;
|
||||
blueman.enable = true;
|
||||
printing.enable = true;
|
||||
openssh.enable = true;
|
||||
|
||||
pipewire = {
|
||||
enable = true;
|
||||
alsa = {
|
||||
enable = true;
|
||||
support32Bit = true;
|
||||
};
|
||||
pulse.enable = true;
|
||||
};
|
||||
avahi = {
|
||||
enable = true;
|
||||
nssmdns4 = true;
|
||||
openFirewall = true;
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
{
|
||||
pkgs,
|
||||
myConfig,
|
||||
inputs,
|
||||
system,
|
||||
specialArgs,
|
||||
...
|
||||
}: {
|
||||
imports = [
|
||||
../../modules/default/darwin.nix
|
||||
];
|
||||
environment.systemPackages = [];
|
||||
|
||||
nix.settings.experimental-features = "nix-command flakes";
|
||||
# nix.settings.trusted-users = myConfig.optionals.Builds.trustedUsers;
|
||||
|
||||
programs.zsh.enable = true; # default shell on catalina
|
||||
programs.fish.enable = true;
|
||||
|
||||
system.stateVersion = 5;
|
||||
|
||||
nixpkgs.hostPlatform = "aarch64-darwin";
|
||||
security.pam.services.sudo_local.touchIdAuth = true;
|
||||
|
||||
users.users.${myConfig.macos.Username} = {
|
||||
name = "${myConfig.macos.Username}";
|
||||
home = "/Users/${myConfig.macos.Username}";
|
||||
};
|
||||
|
||||
home-manager.useGlobalPkgs = true;
|
||||
home-manager.useUserPackages = true;
|
||||
home-manager.extraSpecialArgs = specialArgs;
|
||||
home-manager.users.${myConfig.macos.Username} = import ../../home/darwin.nix;
|
||||
}
|
||||
@@ -0,0 +1,133 @@
|
||||
# Edit this configuration file to define what should be installed on
|
||||
# your system. Help is available in the configuration.nix(5) man page, on
|
||||
# https://search.nixos.org/options and in the NixOS manual (`nixos-help`).
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
myConfig,
|
||||
inputs,
|
||||
...
|
||||
}: {
|
||||
imports = [
|
||||
# Include the results of the hardware scan.
|
||||
./hardware-configuration.nix
|
||||
];
|
||||
|
||||
# Use the systemd-boot EFI boot loader.
|
||||
boot.loader.systemd-boot.enable = true;
|
||||
boot.loader.efi.canTouchEfiVariables = true;
|
||||
|
||||
# networking.hostName = "nixos"; # Define your hostname.
|
||||
# Pick only one of the below networking options.
|
||||
# networking.wireless.enable = true; # Enables wireless support via wpa_supplicant.
|
||||
networking.networkmanager.enable = true; # Easiest to use and most distros use this by default.
|
||||
|
||||
# Set your time zone.
|
||||
time.timeZone = "${myConfig.nixos.Timezone}";
|
||||
|
||||
# Configure network proxy if necessary
|
||||
# networking.proxy.default = "http://user:password@proxy:port/";
|
||||
# networking.proxy.noProxy = "127.0.0.1,localhost,internal.domain";
|
||||
|
||||
# Select internationalisation properties.
|
||||
i18n.defaultLocale = "en_US.UTF-8";
|
||||
console = {
|
||||
earlySetup = false;
|
||||
font = "${pkgs.terminus_font}/share/consolefonts/ter-132n.psf.gz";
|
||||
packages = with pkgs; [terminus_font];
|
||||
useXkbConfig = true;
|
||||
};
|
||||
|
||||
# Enable the X11 windowing system.
|
||||
# services.xserver.enable = true;
|
||||
|
||||
# Configure keymap in X11
|
||||
# services.xserver.xkb.layout = "us";
|
||||
# services.xserver.xkb.options = "eurosign:e,caps:escape";
|
||||
|
||||
# Enable CUPS to print documents.
|
||||
# services.printing.enable = true;
|
||||
|
||||
# Enable sound.
|
||||
# services.pulseaudio.enable = true;
|
||||
# OR
|
||||
services.pipewire = {
|
||||
enable = true;
|
||||
pulse.enable = true;
|
||||
};
|
||||
|
||||
hardware.bluetooth.enable = true;
|
||||
services = {
|
||||
blueman.enable = true;
|
||||
};
|
||||
|
||||
# Enable touchpad support (enabled default in most desktopManager).
|
||||
# services.libinput.enable = true;
|
||||
|
||||
# Define a user account. Don't forget to set a password with ‘passwd’.
|
||||
users.users.${myConfig.essentials.Username} = {
|
||||
isNormalUser = true;
|
||||
extraGroups = ["wheel"]; # Enable ‘sudo’ for the user.
|
||||
packages = with pkgs; [
|
||||
tree
|
||||
];
|
||||
};
|
||||
|
||||
# programs.firefox.enable = true;
|
||||
|
||||
# List packages installed in system profile.
|
||||
# You can use https://search.nixos.org/ to find more packages (and options).
|
||||
environment.systemPackages = with pkgs; [
|
||||
inputs.nixovim.packages.${system}.full
|
||||
# linux-firmware
|
||||
vim # Do not forget to add an editor to edit configuration.nix! The Nano editor is also installed by default.
|
||||
wget
|
||||
];
|
||||
|
||||
hardware.firmware = [
|
||||
pkgs.linux-firmware
|
||||
];
|
||||
# Some programs need SUID wrappers, can be configured further or are
|
||||
# started in user sessions.
|
||||
# programs.mtr.enable = true;
|
||||
# programs.gnupg.agent = {
|
||||
# enable = true;
|
||||
# enableSSHSupport = true;
|
||||
# };
|
||||
|
||||
# List services that you want to enable:
|
||||
|
||||
# Enable the OpenSSH daemon.
|
||||
services.openssh.enable = true;
|
||||
|
||||
# Open ports in the firewall.
|
||||
# networking.firewall.allowedTCPPorts = [ ... ];
|
||||
# networking.firewall.allowedUDPPorts = [ ... ];
|
||||
# Or disable the firewall altogether.
|
||||
# networking.firewall.enable = false;
|
||||
|
||||
# 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.
|
||||
# system.copySystemConfiguration = true;
|
||||
|
||||
# This option defines the first version of NixOS you have installed on this particular machine,
|
||||
# and is used to maintain compatibility with application data (e.g. databases) created on older NixOS versions.
|
||||
#
|
||||
# Most users should NEVER change this value after the initial install, for any reason,
|
||||
# even if you've upgraded your system to a new NixOS release.
|
||||
#
|
||||
# This value does NOT affect the Nixpkgs version your packages and OS are pulled from,
|
||||
# so changing it will NOT upgrade your system - see https://nixos.org/manual/nixos/stable/#sec-upgrading for how
|
||||
# to actually do that.
|
||||
#
|
||||
# This value being lower than the current NixOS release does NOT mean your system is
|
||||
# out of date, out of support, or vulnerable.
|
||||
#
|
||||
# Do NOT change this value unless you have manually inspected all the changes it would make to your configuration,
|
||||
# and migrated your data accordingly.
|
||||
#
|
||||
# For more information, see `man configuration.nix` or https://nixos.org/manual/nixos/stable/options#opt-system.stateVersion .
|
||||
system.stateVersion = "25.11"; # Did you read the comment?
|
||||
}
|
||||
@@ -0,0 +1,47 @@
|
||||
# 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/disk/by-uuid/9f701bae-3392-4927-b27d-a905dd67edab";
|
||||
fsType = "btrfs";
|
||||
options = [ "subvol=@" ];
|
||||
};
|
||||
|
||||
fileSystems."/boot" =
|
||||
{ device = "/dev/disk/by-uuid/894C-F998";
|
||||
fsType = "vfat";
|
||||
options = [ "fmask=0077" "dmask=0077" ];
|
||||
};
|
||||
|
||||
fileSystems."/home" =
|
||||
{ device = "/dev/disk/by-uuid/780aa81f-c4d6-478b-9c51-2d60362fdb07";
|
||||
fsType = "ext4";
|
||||
};
|
||||
|
||||
swapDevices =
|
||||
[ { device = "/dev/disk/by-uuid/b02ef55c-4caf-4a24-a6a2-fb8001eafe22"; }
|
||||
];
|
||||
|
||||
# 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.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;
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
{pkgs, ...}: {
|
||||
environment.systemPackages = with pkgs; [
|
||||
usbutils
|
||||
pciutils
|
||||
pavucontrol
|
||||
wget
|
||||
dualsensectl
|
||||
protontricks
|
||||
wl-clipboard
|
||||
tldr
|
||||
anki
|
||||
lact
|
||||
lm_sensors
|
||||
grim
|
||||
];
|
||||
imports = [
|
||||
../../packages/virtualbox/default.nix
|
||||
# ../../packages/lact/default.nix
|
||||
];
|
||||
hardware.amdgpu.overdrive.enable = true;
|
||||
services.lact.enable = true;
|
||||
# services = {
|
||||
# protonvpn = {
|
||||
# enable = true;
|
||||
# autostart = true;
|
||||
# };
|
||||
# };
|
||||
}
|
||||
@@ -0,0 +1,68 @@
|
||||
{
|
||||
myConfig,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}: {
|
||||
boot = {
|
||||
loader = {
|
||||
timeout = 0;
|
||||
efi = {
|
||||
canTouchEfiVariables = true;
|
||||
efiSysMountPoint = "/boot";
|
||||
};
|
||||
|
||||
limine = lib.mkIf (myConfig.nixos.Boot.mode == "limine") {
|
||||
enable = true;
|
||||
maxGenerations = 5;
|
||||
};
|
||||
|
||||
systemd-boot = lib.mkIf (myConfig.nixos.Boot.mode == "systemd") {
|
||||
enable = true;
|
||||
# xbootldrMountPoint = "/boot";
|
||||
|
||||
edk2-uefi-shell.enable = true;
|
||||
edk2-uefi-shell.sortKey = "z_edk2";
|
||||
};
|
||||
|
||||
# grub ain't that great for advanced setups such as using a secure boot.
|
||||
grub = lib.mkIf (myConfig.nixos.Boot.mode == "grub") {
|
||||
enable = true;
|
||||
efiSupport = true;
|
||||
device = "nodev";
|
||||
useOSProber = true;
|
||||
};
|
||||
};
|
||||
|
||||
plymouth = {
|
||||
enable = false;
|
||||
theme = "seal";
|
||||
themePackages = with pkgs; [
|
||||
(adi1090x-plymouth-themes.override {
|
||||
selected_themes = ["seal"];
|
||||
})
|
||||
];
|
||||
};
|
||||
|
||||
# blacklistedKernelModules = ["tpm_crb" "tpm_tis" "tpm"];
|
||||
|
||||
kernelPackages = pkgs.linuxPackages_cachyos;
|
||||
kernelParams = [
|
||||
# "quiet"
|
||||
# "splash"
|
||||
"boot.shell_on_fail"
|
||||
"udev.log_priority=3"
|
||||
"rd.systemd.show_status=auto"
|
||||
"kvm.enable_virt_at_load=0"
|
||||
];
|
||||
|
||||
initrd = {
|
||||
systemd.enable = true;
|
||||
kernelModules = [];
|
||||
verbose = false;
|
||||
};
|
||||
|
||||
consoleLogLevel = 0;
|
||||
};
|
||||
hardware.amdgpu.initrd.enable = true;
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
{
|
||||
imports = [
|
||||
../../packages/python/default.nix
|
||||
];
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
{
|
||||
lib,
|
||||
myConfig,
|
||||
pkgs,
|
||||
...
|
||||
}: {
|
||||
imports = [
|
||||
# ../../packages/quickshell/default.nix
|
||||
../../packages/hyprland/default.nix
|
||||
../../packages/sunshine/default.nix
|
||||
];
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
{pkgs, ...}: {
|
||||
imports = [
|
||||
../../packages/python/default.nix
|
||||
];
|
||||
environment.systemPackages = with pkgs; [
|
||||
p7zip
|
||||
];
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
{
|
||||
lib,
|
||||
myConfig,
|
||||
...
|
||||
}: {
|
||||
imports =
|
||||
[
|
||||
../../packages/steam/default.nix
|
||||
]
|
||||
++ lib.optionals (myConfig.nixos.enableSteamOS == true)
|
||||
[
|
||||
../../packages/steam/jovian.nix
|
||||
];
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
# file: configuration.nix
|
||||
{
|
||||
pkgs,
|
||||
lib,
|
||||
...
|
||||
}: let
|
||||
sources = import ./nix/sources.nix;
|
||||
lanzaboote = import sources.lanzaboote;
|
||||
in {
|
||||
imports = [lanzaboote.nixosModules.lanzaboote];
|
||||
|
||||
environment.systemPackages = [
|
||||
# For debugging and troubleshooting Secure Boot.
|
||||
pkgs.sbctl
|
||||
];
|
||||
|
||||
# Lanzaboote currently replaces the systemd-boot module.
|
||||
# This setting is usually set to true in configuration.nix
|
||||
# generated at installation time. So we force it to false
|
||||
# for now.
|
||||
boot.loader.systemd-boot.enable = lib.mkForce false;
|
||||
|
||||
boot.lanzaboote = {
|
||||
enable = true;
|
||||
pkiBundle = "/var/lib/sbctl";
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
{
|
||||
lib,
|
||||
myConfig,
|
||||
...
|
||||
}: {
|
||||
services.greetd = {
|
||||
enable = true;
|
||||
settings.default_session = {
|
||||
user = lib.mkOverride 10 "${myConfig.essentials.Username}";
|
||||
command = lib.mkOverride 10 "Hyprland";
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
{
|
||||
imports = [
|
||||
# ../../packages/moondeck-buddy/appimage.nix
|
||||
../../packages/sunshine/default.nix
|
||||
];
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{pkgs, ...}: {
|
||||
imports = [
|
||||
# ./lanzaboote.nix
|
||||
];
|
||||
environment.systemPackages = with pkgs; [
|
||||
niv
|
||||
sbctl
|
||||
];
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{pkgs, ...}: {
|
||||
# services.udev.extraRules = ''
|
||||
# SUBSYSTEM=="usb", ATTR{idVendor}=="0e8d", ATTR{idProduct}=="0616", ATTR{power/wakeup}="enabled"
|
||||
#
|
||||
# '';
|
||||
services.udev.packages = with pkgs; [
|
||||
game-devices-udev-rules
|
||||
];
|
||||
}
|
||||
@@ -1,6 +0,0 @@
|
||||
{
|
||||
imports = [
|
||||
../../apps/jellyfin-tui/home.nix
|
||||
../../apps/btop/home.nix
|
||||
];
|
||||
}
|
||||
@@ -1,8 +1,19 @@
|
||||
{
|
||||
{pkgs, ...}: {
|
||||
imports = [
|
||||
../../apps/yazi/home.nix
|
||||
../../apps/gemini/home.nix
|
||||
../../apps/firefox/home.nix
|
||||
# ../../apps/starship/home.nix
|
||||
../../packages/firefox/home.nix
|
||||
];
|
||||
|
||||
home.packages = with pkgs; [
|
||||
heroic
|
||||
# fcitx5
|
||||
# fcitx5-mozc-ut
|
||||
# kdePackages.fcitx5-configtool
|
||||
solaar
|
||||
parted
|
||||
edk2-uefi-shell
|
||||
libreoffice
|
||||
];
|
||||
services.easyeffects = {
|
||||
enable = true;
|
||||
};
|
||||
}
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
{
|
||||
inputs,
|
||||
pkgs,
|
||||
lib,
|
||||
...
|
||||
}: {
|
||||
imports = [
|
||||
inputs.illogical-impulse.homeManagerModules.default
|
||||
../../packages/fonts/home.nix
|
||||
];
|
||||
programs.illogical-impulse.enable = true;
|
||||
programs.illogical-impulse.settings = {
|
||||
hyprland.useNixForConf = false;
|
||||
simpleStarship.enable = true;
|
||||
};
|
||||
|
||||
# wayland.windowManager.hyprland = {
|
||||
# settings = {
|
||||
# monitor = lib.mkForce [
|
||||
# "DP-1, highres@180,0x1080,1,bitdepth,10,cm,hdr,sdrbrightness,1.4,sdrsaturation,0.98"
|
||||
# "DP-2, highres@highrr,760x0,1"
|
||||
# ];
|
||||
# };
|
||||
# };
|
||||
# programs.illogical-impulse.settings.simpleStarship.enable = true;
|
||||
home.packages = [
|
||||
];
|
||||
}
|
||||
@@ -1,19 +0,0 @@
|
||||
{pkgs, ...}: {
|
||||
home.packages = with pkgs; [
|
||||
protonup-qt
|
||||
protontricks
|
||||
mangohud
|
||||
];
|
||||
|
||||
programs.mangohud = {
|
||||
enable = true;
|
||||
settings = {
|
||||
full = true;
|
||||
no_display = true; # Don't show by default (toggle with Shift+F12)
|
||||
cpu_temp = true;
|
||||
gpu_temp = true;
|
||||
ram = true;
|
||||
vram = true;
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -1,10 +0,0 @@
|
||||
{
|
||||
imports = [
|
||||
../../apps/tte/hakase-screensaver.nix
|
||||
../../apps/hyprland/home.nix
|
||||
../../apps/walker/home.nix
|
||||
# ../../apps/fsel/home.nix
|
||||
../../apps/hyprpaper/home.nix
|
||||
../../apps/tte/home.nix
|
||||
];
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
{
|
||||
imports = [
|
||||
# ../../packages/moondeck-buddy/appimage.nix
|
||||
../../packages/sunshine/default.nix
|
||||
];
|
||||
}
|
||||
@@ -1,9 +1,19 @@
|
||||
{
|
||||
imports = [
|
||||
../../apps/neovim/neovim.nix
|
||||
../../apps/git/home.nix
|
||||
../../apps/zoxide/home.nix
|
||||
../../apps/fish/home.nix
|
||||
../../apps/ghostty/home.nix
|
||||
../../packages/fish/home.nix
|
||||
../../packages/kitty/home.nix
|
||||
../../packages/neovim/home.nix
|
||||
# ../../packages/starship/home.nix
|
||||
../../packages/fastfetch/home.nix
|
||||
../../packages/zsh/home.nix
|
||||
../../packages/zoxide/home.nix
|
||||
../../packages/fonts/home.nix
|
||||
|
||||
../../packages/git/home.nix
|
||||
|
||||
../../packages/btop/home.nix
|
||||
../../packages/eza/home.nix
|
||||
|
||||
../../packages/cloudflared/home.nix
|
||||
];
|
||||
}
|
||||
|
||||
@@ -1,6 +0,0 @@
|
||||
{
|
||||
imports = [
|
||||
../../apps/stylix/home.nix
|
||||
../../apps/matugen/home.nix
|
||||
];
|
||||
}
|
||||
@@ -1,6 +0,0 @@
|
||||
{
|
||||
imports = [
|
||||
../../apps/waybar/home.nix
|
||||
../../apps/waybar/hakase-popup.nix
|
||||
];
|
||||
}
|
||||
@@ -1,23 +0,0 @@
|
||||
{pkgs, ...}: {
|
||||
imports = [
|
||||
../../system/time.nix
|
||||
../../system/backlight.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
|
||||
../../system/kernel.nix
|
||||
];
|
||||
environment.systemPackages = with pkgs; [
|
||||
# FIXME: must be on their own app
|
||||
git
|
||||
cloudflared
|
||||
];
|
||||
}
|
||||
@@ -1,5 +0,0 @@
|
||||
{
|
||||
imports = [
|
||||
../../system/steam.nix
|
||||
];
|
||||
}
|
||||
@@ -1,5 +0,0 @@
|
||||
{
|
||||
imports = [
|
||||
../../apps/hyprland/default.nix
|
||||
];
|
||||
}
|
||||
@@ -1,4 +0,0 @@
|
||||
{
|
||||
imports = [
|
||||
];
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
{
|
||||
"lanzaboote": {
|
||||
"branch": "master",
|
||||
"description": "Secure Boot for NixOS [maintainers=@blitz @raitobezarius @nikstur]",
|
||||
"homepage": "",
|
||||
"owner": "nix-community",
|
||||
"repo": "lanzaboote",
|
||||
"rev": "v0.4.2",
|
||||
"sha256": "0xc1wawnb0297h5khxblmf9pd1fry950xkcm7mwlck19s2906h80",
|
||||
"type": "tarball",
|
||||
"url": "https://github.com/nix-community/lanzaboote/archive/v0.4.2.tar.gz",
|
||||
"url_template": "https://github.com/<owner>/<repo>/archive/<rev>.tar.gz",
|
||||
"version": "0.4.2"
|
||||
},
|
||||
"nixpkgs": {
|
||||
"branch": "nixos-unstable",
|
||||
"description": "Nix Packages collection",
|
||||
"homepage": null,
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "6c43a3495a11e261e5f41e5d7eda2d71dae1b2fe",
|
||||
"sha256": "16f329z831bq7l3wn1dfvbkh95l2gcggdwn6rk3cisdmv2aa3189",
|
||||
"type": "tarball",
|
||||
"url": "https://github.com/NixOS/nixpkgs/archive/6c43a3495a11e261e5f41e5d7eda2d71dae1b2fe.tar.gz",
|
||||
"url_template": "https://github.com/<owner>/<repo>/archive/<rev>.tar.gz"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,198 @@
|
||||
# This file has been generated by Niv.
|
||||
|
||||
let
|
||||
|
||||
#
|
||||
# The fetchers. fetch_<type> fetches specs of type <type>.
|
||||
#
|
||||
|
||||
fetch_file = pkgs: name: spec:
|
||||
let
|
||||
name' = sanitizeName name + "-src";
|
||||
in
|
||||
if spec.builtin or true then
|
||||
builtins_fetchurl { inherit (spec) url sha256; name = name'; }
|
||||
else
|
||||
pkgs.fetchurl { inherit (spec) url sha256; name = name'; };
|
||||
|
||||
fetch_tarball = pkgs: name: spec:
|
||||
let
|
||||
name' = sanitizeName name + "-src";
|
||||
in
|
||||
if spec.builtin or true then
|
||||
builtins_fetchTarball { name = name'; inherit (spec) url sha256; }
|
||||
else
|
||||
pkgs.fetchzip { name = name'; inherit (spec) url sha256; };
|
||||
|
||||
fetch_git = name: spec:
|
||||
let
|
||||
ref =
|
||||
spec.ref or (
|
||||
if spec ? branch then "refs/heads/${spec.branch}" else
|
||||
if spec ? tag then "refs/tags/${spec.tag}" else
|
||||
abort "In git source '${name}': Please specify `ref`, `tag` or `branch`!"
|
||||
);
|
||||
submodules = spec.submodules or false;
|
||||
submoduleArg =
|
||||
let
|
||||
nixSupportsSubmodules = builtins.compareVersions builtins.nixVersion "2.4" >= 0;
|
||||
emptyArgWithWarning =
|
||||
if submodules
|
||||
then
|
||||
builtins.trace
|
||||
(
|
||||
"The niv input \"${name}\" uses submodules "
|
||||
+ "but your nix's (${builtins.nixVersion}) builtins.fetchGit "
|
||||
+ "does not support them"
|
||||
)
|
||||
{ }
|
||||
else { };
|
||||
in
|
||||
if nixSupportsSubmodules
|
||||
then { inherit submodules; }
|
||||
else emptyArgWithWarning;
|
||||
in
|
||||
builtins.fetchGit
|
||||
({ url = spec.repo; inherit (spec) rev; inherit ref; } // submoduleArg);
|
||||
|
||||
fetch_local = spec: spec.path;
|
||||
|
||||
fetch_builtin-tarball = name: throw
|
||||
''[${name}] The niv type "builtin-tarball" is deprecated. You should instead use `builtin = true`.
|
||||
$ niv modify ${name} -a type=tarball -a builtin=true'';
|
||||
|
||||
fetch_builtin-url = name: throw
|
||||
''[${name}] The niv type "builtin-url" will soon be deprecated. You should instead use `builtin = true`.
|
||||
$ niv modify ${name} -a type=file -a builtin=true'';
|
||||
|
||||
#
|
||||
# Various helpers
|
||||
#
|
||||
|
||||
# https://github.com/NixOS/nixpkgs/pull/83241/files#diff-c6f540a4f3bfa4b0e8b6bafd4cd54e8bR695
|
||||
sanitizeName = name:
|
||||
(
|
||||
concatMapStrings (s: if builtins.isList s then "-" else s)
|
||||
(
|
||||
builtins.split "[^[:alnum:]+._?=-]+"
|
||||
((x: builtins.elemAt (builtins.match "\\.*(.*)" x) 0) name)
|
||||
)
|
||||
);
|
||||
|
||||
# The set of packages used when specs are fetched using non-builtins.
|
||||
mkPkgs = sources: system:
|
||||
let
|
||||
sourcesNixpkgs =
|
||||
import (builtins_fetchTarball { inherit (sources.nixpkgs) url sha256; }) { inherit system; };
|
||||
hasNixpkgsPath = builtins.any (x: x.prefix == "nixpkgs") builtins.nixPath;
|
||||
hasThisAsNixpkgsPath = <nixpkgs> == ./.;
|
||||
in
|
||||
if builtins.hasAttr "nixpkgs" sources
|
||||
then sourcesNixpkgs
|
||||
else if hasNixpkgsPath && ! hasThisAsNixpkgsPath then
|
||||
import <nixpkgs> { }
|
||||
else
|
||||
abort
|
||||
''
|
||||
Please specify either <nixpkgs> (through -I or NIX_PATH=nixpkgs=...) or
|
||||
add a package called "nixpkgs" to your sources.json.
|
||||
'';
|
||||
|
||||
# The actual fetching function.
|
||||
fetch = pkgs: name: spec:
|
||||
|
||||
if ! builtins.hasAttr "type" spec then
|
||||
abort "ERROR: niv spec ${name} does not have a 'type' attribute"
|
||||
else if spec.type == "file" then fetch_file pkgs name spec
|
||||
else if spec.type == "tarball" then fetch_tarball pkgs name spec
|
||||
else if spec.type == "git" then fetch_git name spec
|
||||
else if spec.type == "local" then fetch_local spec
|
||||
else if spec.type == "builtin-tarball" then fetch_builtin-tarball name
|
||||
else if spec.type == "builtin-url" then fetch_builtin-url name
|
||||
else
|
||||
abort "ERROR: niv spec ${name} has unknown type ${builtins.toJSON spec.type}";
|
||||
|
||||
# If the environment variable NIV_OVERRIDE_${name} is set, then use
|
||||
# the path directly as opposed to the fetched source.
|
||||
replace = name: drv:
|
||||
let
|
||||
saneName = stringAsChars (c: if (builtins.match "[a-zA-Z0-9]" c) == null then "_" else c) name;
|
||||
ersatz = builtins.getEnv "NIV_OVERRIDE_${saneName}";
|
||||
in
|
||||
if ersatz == "" then drv else
|
||||
# this turns the string into an actual Nix path (for both absolute and
|
||||
# relative paths)
|
||||
if builtins.substring 0 1 ersatz == "/" then /. + ersatz else /. + builtins.getEnv "PWD" + "/${ersatz}";
|
||||
|
||||
# Ports of functions for older nix versions
|
||||
|
||||
# a Nix version of mapAttrs if the built-in doesn't exist
|
||||
mapAttrs = builtins.mapAttrs or (
|
||||
f: set: with builtins;
|
||||
listToAttrs (map (attr: { name = attr; value = f attr set.${attr}; }) (attrNames set))
|
||||
);
|
||||
|
||||
# https://github.com/NixOS/nixpkgs/blob/0258808f5744ca980b9a1f24fe0b1e6f0fecee9c/lib/lists.nix#L295
|
||||
range = first: last: if first > last then [ ] else builtins.genList (n: first + n) (last - first + 1);
|
||||
|
||||
# https://github.com/NixOS/nixpkgs/blob/0258808f5744ca980b9a1f24fe0b1e6f0fecee9c/lib/strings.nix#L257
|
||||
stringToCharacters = s: map (p: builtins.substring p 1 s) (range 0 (builtins.stringLength s - 1));
|
||||
|
||||
# https://github.com/NixOS/nixpkgs/blob/0258808f5744ca980b9a1f24fe0b1e6f0fecee9c/lib/strings.nix#L269
|
||||
stringAsChars = f: s: concatStrings (map f (stringToCharacters s));
|
||||
concatMapStrings = f: list: concatStrings (map f list);
|
||||
concatStrings = builtins.concatStringsSep "";
|
||||
|
||||
# https://github.com/NixOS/nixpkgs/blob/8a9f58a375c401b96da862d969f66429def1d118/lib/attrsets.nix#L331
|
||||
optionalAttrs = cond: as: if cond then as else { };
|
||||
|
||||
# fetchTarball version that is compatible between all the versions of Nix
|
||||
builtins_fetchTarball = { url, name ? null, sha256 }@attrs:
|
||||
let
|
||||
inherit (builtins) lessThan nixVersion fetchTarball;
|
||||
in
|
||||
if lessThan nixVersion "1.12" then
|
||||
fetchTarball ({ inherit url; } // (optionalAttrs (name != null) { inherit name; }))
|
||||
else
|
||||
fetchTarball attrs;
|
||||
|
||||
# fetchurl version that is compatible between all the versions of Nix
|
||||
builtins_fetchurl = { url, name ? null, sha256 }@attrs:
|
||||
let
|
||||
inherit (builtins) lessThan nixVersion fetchurl;
|
||||
in
|
||||
if lessThan nixVersion "1.12" then
|
||||
fetchurl ({ inherit url; } // (optionalAttrs (name != null) { inherit name; }))
|
||||
else
|
||||
fetchurl attrs;
|
||||
|
||||
# Create the final "sources" from the config
|
||||
mkSources = config:
|
||||
mapAttrs
|
||||
(
|
||||
name: spec:
|
||||
if builtins.hasAttr "outPath" spec
|
||||
then
|
||||
abort
|
||||
"The values in sources.json should not have an 'outPath' attribute"
|
||||
else
|
||||
spec // { outPath = replace name (fetch config.pkgs name spec); }
|
||||
)
|
||||
config.sources;
|
||||
|
||||
# The "config" used by the fetchers
|
||||
mkConfig =
|
||||
{ sourcesFile ? if builtins.pathExists ./sources.json then ./sources.json else null
|
||||
, sources ? if sourcesFile == null then { } else builtins.fromJSON (builtins.readFile sourcesFile)
|
||||
, system ? builtins.currentSystem
|
||||
, pkgs ? mkPkgs sources system
|
||||
}: rec {
|
||||
# The sources, i.e. the attribute set of spec name to spec
|
||||
inherit sources;
|
||||
|
||||
# The "pkgs" (evaluated nixpkgs) to use for e.g. non-builtin fetchers
|
||||
inherit pkgs;
|
||||
};
|
||||
|
||||
in
|
||||
mkSources (mkConfig { }) // { __functor = _: settings: mkSources (mkConfig settings); }
|
||||
@@ -0,0 +1,5 @@
|
||||
{pkgs, ...}: {
|
||||
home.packages = with pkgs; [
|
||||
bibata-cursors
|
||||
];
|
||||
}
|
||||
@@ -3,7 +3,6 @@
|
||||
enable = true;
|
||||
settings = {
|
||||
vim_keys = true;
|
||||
color_theme = "TTY";
|
||||
theme_background = false;
|
||||
};
|
||||
};
|
||||
@@ -1,5 +1,5 @@
|
||||
{pkgs, ...}: {
|
||||
home.packages = with pkgs; [
|
||||
jellyfin-tui
|
||||
cloudflared
|
||||
];
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
{pkgs, ...}: {
|
||||
programs.eza = {
|
||||
enable = true;
|
||||
git = true;
|
||||
colors = "auto";
|
||||
icons = "auto";
|
||||
|
||||
enableZshIntegration = true;
|
||||
enableFishIntegration = true;
|
||||
enableBashIntegration = true;
|
||||
};
|
||||
}
|
||||
@@ -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}╰───────────────────────────────╯";
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,113 @@
|
||||
{
|
||||
programs.firefox = {
|
||||
enable = true;
|
||||
languagePacks = [
|
||||
"en-US"
|
||||
];
|
||||
profiles = {
|
||||
hakase = {
|
||||
search.force = true;
|
||||
isDefault = true;
|
||||
search.default = "ddg";
|
||||
settings = {
|
||||
"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;
|
||||
"browser.startup.homepage" = "https://dash.sakamoto.dev";
|
||||
"browser.newtabpage.pinned" = [
|
||||
{
|
||||
title = "Dashboard";
|
||||
url = "https://dash.sakamoto.dev";
|
||||
}
|
||||
];
|
||||
};
|
||||
bookmarks = {
|
||||
force = true;
|
||||
settings = [
|
||||
{
|
||||
toolbar = true;
|
||||
bookmarks = [
|
||||
{
|
||||
name = "Home Manager";
|
||||
url = "https://mynixos.com/home-manager/options/programs";
|
||||
}
|
||||
{
|
||||
name = "YouTube";
|
||||
url = "https://youtube.com";
|
||||
}
|
||||
];
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
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 = "always"; # 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 = "allowed";
|
||||
"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";
|
||||
# };
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -9,9 +9,9 @@
|
||||
set fish_greeting
|
||||
fish_vi_key_bindings
|
||||
zoxide init fish | source
|
||||
zoxide init fish --cmd cd | source
|
||||
|
||||
'';
|
||||
shellAliases = myConfig.terminal.aliases;
|
||||
shellAliases = myConfig.general.Terminal.aliases;
|
||||
|
||||
plugins = with pkgs.fishPlugins; [
|
||||
];
|
||||
@@ -0,0 +1,8 @@
|
||||
{pkgs, ...}: {
|
||||
fonts = {
|
||||
fontconfig.enable = true;
|
||||
};
|
||||
home.packages = with pkgs; [
|
||||
nerd-fonts.jetbrains-mono
|
||||
];
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
{myConfig, ...}: {
|
||||
programs.git = {
|
||||
enable = true;
|
||||
extraConfig = {
|
||||
user.name = "${myConfig.nixos.Git.user}";
|
||||
user.email = "${myConfig.nixos.Git.email}";
|
||||
init.defaultBranch = "${myConfig.nixos.Git.defaultBranch}";
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -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.
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
{
|
||||
config,
|
||||
pkgs,
|
||||
myConfig,
|
||||
...
|
||||
}: {
|
||||
wayland.windowManager.hyprland.settings = {
|
||||
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"
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,300 @@
|
||||
{
|
||||
config,
|
||||
pkgs,
|
||||
...
|
||||
}: {
|
||||
wayland.windowManager.hyprland.settings = {
|
||||
exec = [
|
||||
"hyprctl dispatch submap global"
|
||||
];
|
||||
|
||||
submap = [
|
||||
"global"
|
||||
];
|
||||
|
||||
# Shell keybinds
|
||||
bindi = [
|
||||
"$mod, Super_L, global, caelestia:launcher" # bind to `bind` because `bindi` maps to it
|
||||
# Launcher
|
||||
];
|
||||
bindin =
|
||||
[
|
||||
"$mod, catchall, global, caelestia:launcherInterrupt"
|
||||
"$mod, mouse:272, global, caelestia:launcherInterrupt"
|
||||
"$mod, mouse:273, global, caelestia:launcherInterrupt"
|
||||
"$mod, mouse:274, global, caelestia:launcherInterrupt"
|
||||
"$mod, mouse:275, global, caelestia:launcherInterrupt"
|
||||
"$mod, mouse:276, global, caelestia:launcherInterrupt"
|
||||
"$mod, mouse:277, global, caelestia:launcherInterrupt"
|
||||
"$mod, mouse_up, global, caelestia:launcherInterrupt"
|
||||
"$mod, mouse_down, global, caelestia:launcherInterrupt"
|
||||
|
||||
"$mod, K, global, caelestia:launcherInterrupt"
|
||||
"$mod, H, global, caelestia:launcherInterrupt"
|
||||
"$mod, J, global, caelestia:launcherInterrupt"
|
||||
"$mod, L, global, caelestia:launcherInterrupt"
|
||||
|
||||
"$mod, S, global, caelestia:launcherInterrupt"
|
||||
"$mod, G, global, caelestia:launcherInterrupt"
|
||||
"$mod, T, global, caelestia:launcherInterrupt"
|
||||
"$mod, D, global, caelestia:launcherInterrupt"
|
||||
"$mod, Escape, global, caelestia:launcherInterrupt"
|
||||
"$mod, PERIOD, global, caelestia:launcherInterrupt"
|
||||
"$mod, SPACE, global, caelestia:launcherInterrupt"
|
||||
"$mod, E, global, caelestia:launcherInterrupt"
|
||||
"$mod, V, global, caelestia:launcherInterrupt"
|
||||
|
||||
"$mod, W, global, caelestia:launcherInterrupt"
|
||||
"$mod, Q, global, caelestia:launcherInterrupt"
|
||||
"$mod, C, global, caelestia:launcherInterrupt"
|
||||
"$mod, Return, global, caelestia:launcherInterrupt"
|
||||
]
|
||||
++ (
|
||||
# Go to workspace group #
|
||||
builtins.concatLists (builtins.genList (
|
||||
i: let
|
||||
ws = i + 1;
|
||||
in [
|
||||
"$mod, ${toString ws}, global, caelestia:launcherInterrupt"
|
||||
]
|
||||
)
|
||||
9)
|
||||
)
|
||||
++ [
|
||||
"$mod, 0, global, caelestia:launcherInterrupt"
|
||||
];
|
||||
bind =
|
||||
[
|
||||
# Misc
|
||||
"Control+Alt, Delete, exec, caelestia:session"
|
||||
"$mod ALT, A, global, caelestia:showall"
|
||||
"$mod ALT, L, global, caelestia:lock"
|
||||
|
||||
"$mod, SPACE, exec, rofi -show drun"
|
||||
|
||||
# Restore lock - these are `bindl` in your original, but `exec` should be fine here.
|
||||
# However, `bindl` is typically for a *release* event. If `caelestia shell -d` is a daemon,
|
||||
# and `caelestia:lock` is a quickshell internal, you might need to reconsider.
|
||||
# For direct translation, they go into `bindl` list.
|
||||
|
||||
# Media - handled by bindl below
|
||||
|
||||
# Apps
|
||||
"$mod, Return, exec, app2unit -- kitty"
|
||||
"$mod, W, exec, app2unit -- firefox"
|
||||
"$mod, E, exec, app2unit -- thunar"
|
||||
"$mod, Q, killactive"
|
||||
"$mod ALT, E, exec, app2unit -- nemo"
|
||||
"Control+Alt, Escape, exec, app2unit -- qps"
|
||||
"Control+Alt, V, exec, app2unit -- pavucontrol"
|
||||
|
||||
# Utilities
|
||||
"$mod SHIFT, S, global, caelestia:screenshotFreeze"
|
||||
"$mod SHIFT ALT, S, global, caelestia:screenshot"
|
||||
"$mod ALT, R, exec, caelestia record -s"
|
||||
"Control+Alt, R, exec, caelestia record"
|
||||
"$mod SHIFT ALT, R, exec, caelestia record -r"
|
||||
"$mod SHIFT, C, exec, hyprpicker -a" # Colour picker
|
||||
|
||||
# Sleep
|
||||
"$mod SHIFT, PRINT, exec, systemctl suspend-then-hibernate"
|
||||
|
||||
# Clipboard and emoji picker
|
||||
"$mod, V, exec, pkill fuzzel || caelestia clipboard"
|
||||
"$mod ALT, V, exec, pkill fuzzel || caelestia clipboard -d"
|
||||
"$mod, Period, exec, pkill fuzzel || caelestia emoji -p"
|
||||
|
||||
# Testing
|
||||
# This is a `bindl` (key release), so move it to `bindl` list below.
|
||||
|
||||
# Window actions
|
||||
"$mod, H, movefocus, l"
|
||||
"$mod, L, movefocus, r"
|
||||
"$mod, K, movefocus, u"
|
||||
"$mod, J, movefocus, d"
|
||||
"$mod SHIFT, H, movewindow, l"
|
||||
"$mod SHIFT, L, movewindow, r"
|
||||
"$mod SHIFT, K, movewindow, u"
|
||||
"$mod SHIFT, J, movewindow, d"
|
||||
"$mod CTRL, Backslash, centerwindow, 1"
|
||||
"$mod CTRL ALT, Backslash, resizeactive, exact 55% 70%"
|
||||
"$mod CTRL ALT, Backslash, centerwindow, 1"
|
||||
"$mod ALT, Backslash, exec, caelestia pip"
|
||||
"$mod, P, pin"
|
||||
"$mod, F, fullscreen, 0"
|
||||
"$mod ALT, F, fullscreen, 1"
|
||||
|
||||
# Special workspace toggles
|
||||
"Control+Shift, Escape, exec, caelestia toggle sysmon"
|
||||
"$mod, Escape, exec, caelestia toggle sysmon"
|
||||
"$mod, M, exec, caelestia toggle music"
|
||||
"$mod, D, exec, caelestia toggle communication"
|
||||
"$mod, R, exec, caelestia toggle todo"
|
||||
|
||||
"$mod, G, togglespecialworkspace, gaming"
|
||||
"$mod SHIFT, G, movetoworkspace, special:gaming"
|
||||
|
||||
"$mod, T, exec, caelestia toggle steam"
|
||||
|
||||
# "$mod, T, togglespecialworkspace, special:steam"
|
||||
# "$mod SHIFT, T, movetoworkspace, special:steam"
|
||||
|
||||
# Toggle special workspace
|
||||
"$mod, S, exec, caelestia toggle specialws"
|
||||
|
||||
# Window groups
|
||||
"$mod, Comma, togglegroup"
|
||||
"$mod SHIFT, Comma, lockactivegroup, toggle"
|
||||
|
||||
# Go to workspace -1/+1 (mouse binds are `bind` for mouse-wheel)
|
||||
"$mod, mouse_down, workspace, -1"
|
||||
"$mod, mouse_up, workspace, +1"
|
||||
|
||||
# Move window to workspace -1/+1
|
||||
"$mod ALT, mouse_down, movetoworkspace, -1"
|
||||
"$mod ALT, mouse_up, movetoworkspace, +1"
|
||||
|
||||
# Move window to/from special workspace
|
||||
"$mod CTRL SHIFT, up, movetoworkspace, special:special"
|
||||
"$mod CTRL SHIFT, down, movetoworkspace, e+0"
|
||||
"$mod ALT, S, movetoworkspace, special:special"
|
||||
]
|
||||
++ (
|
||||
# Go to workspace #
|
||||
let
|
||||
wsaction = "~/.config/hypr/scripts/wsaction.fish";
|
||||
in
|
||||
builtins.concatLists (builtins.genList (
|
||||
i: let
|
||||
ws = i + 1;
|
||||
in [
|
||||
"$mod, ${toString ws}, exec, ${wsaction} workspace ${toString ws}"
|
||||
]
|
||||
)
|
||||
9) # For workspaces 1-9
|
||||
)
|
||||
++ [
|
||||
# "$mod, 0, exec, ${config.wayland.windowManager.hyprland.settings.workspaceRule."0".exec} workspace 10" # Workaround for workspace 0
|
||||
# Re-adding `wsaction` since it's used here.
|
||||
"$mod, 0, exec, ~/.config/hypr/scripts/wsaction.fish workspace 10"
|
||||
]
|
||||
++ (
|
||||
# Go to workspace group #
|
||||
let
|
||||
wsaction = "~/.config/hypr/scripts/wsaction.fish";
|
||||
in
|
||||
builtins.concatLists (builtins.genList (
|
||||
i: let
|
||||
ws = i + 1;
|
||||
in [
|
||||
"Control+$mod, ${toString ws}, exec, ${wsaction} -g workspace ${toString ws}"
|
||||
]
|
||||
)
|
||||
9)
|
||||
)
|
||||
++ [
|
||||
"Control+$mod, 0, exec, ~/.config/hypr/scripts/wsaction.fish -g workspace 10"
|
||||
]
|
||||
++ (
|
||||
# Move window to workspace #
|
||||
let
|
||||
wsaction = "~/.config/hypr/scripts/wsaction.fish";
|
||||
in
|
||||
builtins.concatLists (builtins.genList (
|
||||
i: let
|
||||
ws = i + 1;
|
||||
in [
|
||||
"$mod SHIFT, ${toString ws}, exec, ${wsaction} movetoworkspace ${toString ws}"
|
||||
]
|
||||
)
|
||||
9)
|
||||
)
|
||||
++ [
|
||||
"$mod SHIFT, 0, exec, ~/.config/hypr/scripts/wsaction.fish movetoworkspace 10"
|
||||
]
|
||||
++ (
|
||||
# Move window to workspace group #
|
||||
let
|
||||
wsaction = "~/.config/hypr/scripts/wsaction.fish";
|
||||
in
|
||||
builtins.concatLists (builtins.genList (
|
||||
i: let
|
||||
ws = i + 1;
|
||||
in [
|
||||
"Control+$mod ALT, ${toString ws}, exec, ${wsaction} -g movetoworkspace ${toString ws}"
|
||||
]
|
||||
)
|
||||
9)
|
||||
)
|
||||
++ [
|
||||
"Control+$mod ALT, 0, exec, ~/.config/hypr/scripts/wsaction.fish -g movetoworkspace 10"
|
||||
];
|
||||
|
||||
binde = [
|
||||
"$mod, Minus, splitratio, -0.1"
|
||||
"$mod, Equal, splitratio, 0.1"
|
||||
"Control+$mod, left, workspace, -1"
|
||||
"$mod, Page_Up, workspace, -1"
|
||||
"Control+$mod, right, workspace, +1"
|
||||
"$mod, Page_Down, workspace, +1"
|
||||
"$mod ALT, Page_Up, movetoworkspace, -1"
|
||||
"$mod ALT, Page_Down, movetoworkspace, +1"
|
||||
"Control+$mod SHIFT, right, movetoworkspace, +1"
|
||||
"Control+$mod SHIFT, left, movetoworkspace, -1"
|
||||
"Alt, Tab, cyclenext, activewindow" # `binde` for cycle next
|
||||
"Control+Alt, Tab, changegroupactive, f" # `binde` for change group active
|
||||
];
|
||||
|
||||
bindm = [
|
||||
"$mod, mouse:272, movewindow"
|
||||
"$mod, Z, movewindow"
|
||||
"$mod, mouse:273, resizewindow"
|
||||
"$mod, X, resizewindow"
|
||||
];
|
||||
|
||||
bindl = [
|
||||
# Restore lock
|
||||
"$mod ALT, L, exec, caelestia shell -d"
|
||||
"$mod ALT, L, global, caelestia:lock" # This is a Hyprland `global` command, not an `exec`
|
||||
|
||||
# Brightness
|
||||
", XF86MonBrightnessUp, global, caelestia:brightnessUp"
|
||||
", XF86MonBrightnessDown, global, caelestia:brightnessDown"
|
||||
|
||||
# Media
|
||||
"Control+$mod, Space, global, caelestia:mediaToggle"
|
||||
", XF86AudioPlay, global, caelestia:mediaToggle"
|
||||
", XF86AudioPause, global, caelestia:mediaToggle"
|
||||
"Control+$mod, Equal, global, caelestia:mediaNext"
|
||||
", XF86AudioNext, global, caelestia:mediaNext"
|
||||
"Control+$mod, Minus, global, caelestia:mediaPrev"
|
||||
", XF86AudioPrev, global, caelestia:mediaPrev"
|
||||
", XF86AudioStop, global, caelestia:mediaStop"
|
||||
|
||||
# Utilities (screenshot is `bindl` in your original)
|
||||
", Print, exec, caelestia screenshot" # Full screen capture > clipboard
|
||||
|
||||
# Volume
|
||||
", XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"
|
||||
"$mod SHIFT, M, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"
|
||||
|
||||
# Clipboard and emoji picker (alternate paste is `bindl`)
|
||||
"Control+Shift+Alt, V, exec, sleep 0.5s && ydotool type -d 1 \"$(cliphist list | head -1 | cliphist decode)\""
|
||||
|
||||
# Testing
|
||||
"$mod ALT, f12, exec, notify-send -u low -i dialog-information-symbolic 'Test notification' \"Here's a really long message to test truncation and wrapping\\nYou can middle click or flick this notification to dismiss it!\" -a 'Shell' -A \"Test1=I got it!\" -A \"Test2=Another action\""
|
||||
];
|
||||
|
||||
bindel = [
|
||||
# Volume
|
||||
", XF86AudioRaiseVolume, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ 0; wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ 10%+"
|
||||
", XF86AudioLowerVolume, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ 0; wpctl set-volume @DEFAULT_AUDIO_SINK@ 10%-"
|
||||
];
|
||||
|
||||
bindr = [
|
||||
# Kill/restart
|
||||
"Control+$mod SHIFT, R, exec, qs -c caelestia kill"
|
||||
"Control+$mod ALT, R, exec, qs -c caelestia kill; caelestia shell -d"
|
||||
];
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
{
|
||||
config,
|
||||
pkgs,
|
||||
myConfig,
|
||||
...
|
||||
}: {
|
||||
wayland.windowManager.hyprland.settings = {
|
||||
exec = [
|
||||
"cp -L --no-preserve=mode --update=none ~/.config/hypr/scheme/default.conf ~/.config/hypr/scheme/current.conf"
|
||||
];
|
||||
source = [
|
||||
"~/.config/hypr/scheme/current.conf"
|
||||
];
|
||||
group = {
|
||||
groupbar = {
|
||||
"text_color" = "rgb($onPrimary)";
|
||||
"col.active" = "rgba($primaryd4)";
|
||||
"col.inactive" = "rgba($outlined4)";
|
||||
"col.locked_active" = "rgba($primaryd4)";
|
||||
"col.locked_inactive" = "rgba($secondaryd4)";
|
||||
};
|
||||
};
|
||||
misc = {
|
||||
background_color = "rgb($surfaceVariant)";
|
||||
};
|
||||
};
|
||||
}
|
||||