Compare commits
No commits in common. "89ff7a1bcbc9ed56dc10542ea371c11903d5e146" and "e7fdc3af6b9eb9c4dfe158c547c5b3764c2f1258" have entirely different histories.
89ff7a1bcb
...
e7fdc3af6b
17 changed files with 836 additions and 45 deletions
109
GUIDE.md
Normal file
109
GUIDE.md
Normal file
|
|
@ -0,0 +1,109 @@
|
|||
# The Nix Documentation Situation
|
||||
The Nix documentation situation is notorious bad. It's difficult to find
|
||||
a concise answer with detailed justification/explanation. And most people
|
||||
(myself included) tend resort to the [ArchWiki](https://wiki.archlinux.org).
|
||||
> [!NOTE]
|
||||
> The [Nix documentation team](https://nixos.org/community/teams/documentation) has an incredibly difficult job.
|
||||
|
||||
Unlike the *centralised* [ArchWiki](https://wiki.archlinux.org), the Nix ecosystem
|
||||
is incredibly large:
|
||||
1. **Nix** (the package manager)
|
||||
2. **Nix/NixLang** (the programming language)
|
||||
3. **Nixpkgs** (the package repository)
|
||||
4. **NixOS** (the linux distribution)
|
||||
5. **Home-Manager** (user environment management)
|
||||
6. **NUR** (Nix User Repository, like the AUR but Nix!)
|
||||
7. *and **many** more...*
|
||||
|
||||
Often each project has its own website, wiki, styling, etc. There is tonnes
|
||||
of information available online but its so hard to find it.
|
||||
|
||||
**Notable organisations:**
|
||||
1. NixOS Foundation (*official organisation that maintains Nix/Nixpkgs/NixOS*)
|
||||
2. Nix Community (*unofficial community providing infrastructure/hosting/visibility for projects*)
|
||||
|
||||
## About Me
|
||||
I love and hate Nix simultaneously.
|
||||
|
||||
Originally *(circa 2023)* I used Windows 10/11 exclusively for programming.
|
||||
But this is tedious and my friend started mentioning Arch Linux. So with their
|
||||
help I formatted a spare SSD and began my journey.
|
||||
|
||||
But I **REALLY** like computers... I have servers, routers, 3 computers
|
||||
actively powered in my bedroom, and *I believe* 8 laptops *currently* in my posession.
|
||||
|
||||
Documenting **every** change I make to a system and spending a week
|
||||
setting up a device I don't really care about isn't sustainable.
|
||||
And then *(circa October 2024)* I learnt about NixOS... And now life is "easy".
|
||||
But learning Nix/NixLang/Nixpkgs/NixOS/Home-Manager/blah-blah-blah was exhausting.
|
||||
So now I'll try to simplify this learning curve for other newbies **<3**
|
||||
|
||||
|
||||
## Nix/NixOS How To
|
||||
### NixOS Documentation
|
||||
Using "the" NixOS wiki is surprisingly confusing (at least it was for me).
|
||||
Why? Because there are multiple and you probably won't realise the difference.
|
||||
|
||||
**Main Wikis:**
|
||||
> These are visually and structurally identical... And are both community run.
|
||||
> But they're content does differ. [nixos.wiki] was created
|
||||
> because ""[wiki.nixos.org] was too limiting with regards to wiki features".
|
||||
1. [https://wiki.nixos.org] (the **official** NixOS wiki)
|
||||
2. [https://nixos.wiki] (the **unofficial** user's wiki, community run)
|
||||
|
||||
|
||||
**Other Resources:**
|
||||
> [!TODO]
|
||||
|
||||
|
||||
### Migrate to a Newer Version of Nixpkgs
|
||||
```bash
|
||||
# Determine the channel name you're using
|
||||
nix-channel --list
|
||||
nix-channel --remove <OLD_CHANNEL>
|
||||
nix-channel --add <NEW_CHANNEL> # ie https://nixos.org/channels/nixos-25.05
|
||||
nix-channel --update
|
||||
|
||||
# Now upgrade system profile (log to file in case of failure)
|
||||
nixos-rebuild boot --upgrade | tee rebuild.log
|
||||
```
|
||||
|
||||
|
||||
|
||||
## Security Implications
|
||||
### NixOS Default Home Permissions
|
||||
```bash
|
||||
# Executing from $HOME
|
||||
>>> mkdir example.d && ls -l example.d
|
||||
-rw-r--r-- 1 me users 1 Jul 25 10:13 example.d
|
||||
>>> echo > example.f && ls -l example.f
|
||||
-rw-r--r-- 1 me users 1 Jul 25 10:15 example.f
|
||||
|
||||
## But these ignore facl?
|
||||
>>> getfacl "$HOME"
|
||||
# file: home/me
|
||||
# owner: me
|
||||
# group: users
|
||||
user::rwx
|
||||
group::---
|
||||
other::---
|
||||
```
|
||||
Many commands default to permissions that ignore the file access control listl (file ACLs).
|
||||
This is not a NixOS specific issue. However this isn't ideal from a security perspective.
|
||||
The simplest solution is a recursive `chmod -R 600 ~` but there are plenty of files we
|
||||
intentionally want to be different.
|
||||
> [!TODO]
|
||||
> Solution: Make a Nix/Home-Manager package allowing for control over folder permissions.
|
||||
> SOlution: Also it should warn if any files owned by $USER have a 2
|
||||
|
||||
|
||||
|
||||
## Further Reading
|
||||
### Finding New Things to Do
|
||||
`man 5 configuration.nix` is incredibly useful
|
||||
similar info can be found at https://mynixos.com/options
|
||||
|
||||
### For your curiosity
|
||||
1. https://wiki.nixos.org/wiki/Firejail
|
||||
|
||||
|
||||
11
SCREENSHARING
Normal file
11
SCREENSHARING
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
Excellent Resource
|
||||
https://gist.github.com/brunoanc/2dea6ddf6974ba4e5d26c3139ffb7580#install-xdg-desktop-portal-and-friends
|
||||
|
||||
Hyprland official page on screensharing
|
||||
https://wiki.hyprland.org/Useful-Utilities/Screen-Sharing/
|
||||
|
||||
|
||||
Multiple sources seem to think that use xdg-desktop-portal-wlr works (but I can't stream individual applications)
|
||||
but I suppose that's better than nothing?
|
||||
|
||||
Also check out xwaylandvideobridge
|
||||
32
TODO.md
Normal file
32
TODO.md
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
## Next Up
|
||||
1. Rename user "ae" to "cry" or "vps"
|
||||
2. Add 404 page to nginx on hyrule
|
||||
3. Add a user called "mirror" that stores important mirrors (inspiration: https://git.gay/mirror)
|
||||
|
||||
## TODO
|
||||
SOON: fix having to keep specifying new sha256 for home-manager (where I fetchTarball for it)
|
||||
|
||||
Create a command palette accessible with MOD+P (MOD => Windows Key)
|
||||
(ie make fullscreen, send to monitor, etc)
|
||||
|
||||
Boring stuff (ie work and uni should go on a separate user account)
|
||||
on in some separate $HOME atleast
|
||||
|
||||
Is home-manager installed standalone? If so please remove that...
|
||||
|
||||
Rewrite the README.md file its all over the place (add more structure to the `docs` directory instead)
|
||||
|
||||
Add a MAC Changer module like
|
||||
https://github.com/XNM1/linux-nixos-hyprland-config-dotfiles/blob/main/nixos/mac-randomize.nix
|
||||
|
||||
Make each monitor's window styling slightly different (just for fun)
|
||||
|
||||
Research "input methods" ie https://wiki.archlinux.org/title/Input_method
|
||||
|
||||
Bind 5 workspaces per connected monitor.
|
||||
Then use the command palette (discussed prior) to send to
|
||||
a different workspace (ie because I currently use MOD+SHIFT+n
|
||||
but if n>=10 then it doesnt work! hence we need a command palette!)
|
||||
|
||||
Can I run openvpn only for a specific proccess and its children?
|
||||
then ie run qbittorrent (just in case the VPN isnt private)
|
||||
6
banner
Normal file
6
banner
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
.------------.
|
||||
| oh my |
|
||||
'------------'
|
||||
^ (\_(\
|
||||
'----- ( -.-)
|
||||
o_(")(")
|
||||
373
config.temp/hyprland.conf
Executable file
373
config.temp/hyprland.conf
Executable file
|
|
@ -0,0 +1,373 @@
|
|||
# All hyprland configuration variables are listed (even niche ones)
|
||||
# to save you the hassle. Reference: https://wiki.hypr.land/Configuring/Variables/
|
||||
#
|
||||
# You can split this configuration into multiple files
|
||||
# Create your files separately and then link them to this file like this:
|
||||
# source = ~/.config/hypr/myColors.conf
|
||||
|
||||
|
||||
################
|
||||
### MONITORS ###
|
||||
################
|
||||
|
||||
# Programming:
|
||||
monitor=eDP-1, highres@highrr, auto, 1.0
|
||||
# Comfy:
|
||||
#monitor=eDP-1, highres@highrr, auto, 1.5
|
||||
|
||||
|
||||
###################
|
||||
### MY PROGRAMS ###
|
||||
###################
|
||||
|
||||
# See https://wiki.hyprland.org/Configuring/Keywords/
|
||||
|
||||
# Set programs that you use
|
||||
$terminal = ghostty #rio
|
||||
$fileManager = thunar
|
||||
# $menu = wofi --show drun
|
||||
# $menu = ags -t "applauncher"
|
||||
$menu = fuzzel
|
||||
$colorpicker = hyprpicker | head -c 7 | wl-copy
|
||||
|
||||
#################
|
||||
### AUTOSTART ###
|
||||
#################
|
||||
|
||||
# Autostart necessary processes (like notifications daemons, status bars, etc.)
|
||||
# Or execute your favorite apps at launch like this:
|
||||
|
||||
# exec-once = $terminal
|
||||
# exec-once = nm-applet &
|
||||
# exec-once = waybar & hyprpaper & firefox
|
||||
exec-once = swww-daemon &
|
||||
exec-once = mako &
|
||||
# TODO: or do I do `swww init` or `swww restore`?
|
||||
|
||||
# █▀▀ █▄░█ █░█ █░█ ▄▀█ █▀█
|
||||
# ██▄ █░▀█ ▀▄▀ ▀▄▀ █▀█ █▀▄
|
||||
|
||||
# See https://wiki.hyprland.org/Configuring/Environment-variables/
|
||||
|
||||
#env = HYPRCURSOR_THEME,Bibata-Modern-Ice
|
||||
env = HYPRCURSOR_SIZE,16
|
||||
#env = XCURSOR_THEME,Bibata-Modern-Ice
|
||||
env = XCURSOR_SIZE,16
|
||||
|
||||
env = QT_QPA_PLATFORM,wayland
|
||||
env = QT_QPA_PLATFORMTHEME,qt5ct
|
||||
env = XDG_MENU_PREFIX,arch-
|
||||
|
||||
# TODO: make this variable (not dependent on helix) in my flake
|
||||
env = EDITOR,hx
|
||||
env = TERMINAL,rio
|
||||
|
||||
|
||||
|
||||
|
||||
# DEBUG: attempting to get screensharing working... (please god help me)
|
||||
# REFERENCE: https://github.com/hyprwm/xdg-desktop-portal-hyprland/issues/251#issuecomment-2345631820
|
||||
env = XDG_CURRENT_DESKTOP,Hyprland
|
||||
exec-once = dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP
|
||||
#exec-once = dbus-update-activation-environment --systemd --all
|
||||
#exec-once = systemctl --user import-environment WAYLAND_DISPLAY XDG_CURRENT_DESKTOP
|
||||
|
||||
|
||||
|
||||
# .__. .___ __..___. . . .___ .___. ._. __ __.
|
||||
# [__] [__ (__ | |__| [__ | | / ` (__
|
||||
# | | [___ .__) | | | [___ | _|_ \__. .__)
|
||||
|
||||
# Refer to https://wiki.hyprland.org/Configuring/Variables/
|
||||
|
||||
# https://wiki.hyprland.org/Configuring/Variables/#general
|
||||
general {
|
||||
gaps_in = 12 # margin between windows
|
||||
gaps_out = 25 # margin from windows to monitor edge
|
||||
gaps_workspaces = 0 # margin between workspaces (stacks with gaps_out)
|
||||
# float_gaps = 0 # gaps_out but for floating windows
|
||||
|
||||
border_size = 4
|
||||
|
||||
# https://wiki.hyprland.org/Configuring/Variables/#variable-types for info about colors
|
||||
col.active_border = rgba(33ccffee) rgba(00ff99ee) 45deg
|
||||
col.inactive_border = rgba(00000000)
|
||||
|
||||
# Set to true enable resizing windows by clicking and dragging on borders and gaps
|
||||
resize_on_border = true
|
||||
|
||||
# Please see https://wiki.hyprland.org/Configuring/Tearing/ before you turn this on
|
||||
allow_tearing = false
|
||||
|
||||
layout = dwindle
|
||||
|
||||
snap {
|
||||
enabled = false
|
||||
window_gap = 10
|
||||
monitor_gap = 10
|
||||
border_overlap = false
|
||||
# respect_gaps = false
|
||||
}
|
||||
}
|
||||
|
||||
# https://wiki.hyprland.org/Configuring/Variables/#decoration
|
||||
decoration {
|
||||
rounding = 20
|
||||
rounding_power = 4.0 # Lp norm
|
||||
border_part_of_window = true # consider border as part of its window
|
||||
screen_shader = # path to custom GLSL fragment shader
|
||||
|
||||
# Window Transparency
|
||||
active_opacity = 1.0
|
||||
inactive_opacity = 0.95
|
||||
fullscreen_opacity = 1.0 # fullscreened windows
|
||||
# Inactive Window Dimming
|
||||
dim_inactive = false
|
||||
dim_strength = 0.5
|
||||
dim_special = 0.2
|
||||
dim_around = 0.4
|
||||
|
||||
# https://wiki.hyprland.org/Configuring/Variables/#blur
|
||||
blur {
|
||||
enabled = true
|
||||
new_optimizations = true
|
||||
xray = false # floating windows xray through tiling windows
|
||||
ignore_opacity = true
|
||||
|
||||
# Blur Parameters
|
||||
size = 8
|
||||
passes = 1
|
||||
noise = 0.0117 # default
|
||||
contrast = 0.8916 # default
|
||||
brightness = 0.8172 # default
|
||||
vibrancy = 0.1696 # default
|
||||
vibrancy_darkness = 0.0 # default
|
||||
|
||||
# Blurring For Specific Window Types
|
||||
special = false # blur special windows
|
||||
popups = false # blur popups
|
||||
popups_ignorealpha = 0.2
|
||||
input_methods = false
|
||||
input_methods_ignorealpha = 0.2
|
||||
}
|
||||
|
||||
shadow {
|
||||
enabled = true
|
||||
ignore_window = true # only render at edges (not behind)
|
||||
|
||||
range = 3
|
||||
render_power = 1 # falloff rate
|
||||
sharp = false # aka infinite shadow.render_power
|
||||
offset = 0 0 # vec2
|
||||
scale = 1.0
|
||||
|
||||
color = rgba(00000000)
|
||||
color_inactive = rgba(000000ff) # defaults to shadow.color if unset
|
||||
}
|
||||
}
|
||||
|
||||
# https://wiki.hyprland.org/Configuring/Variables/#animations
|
||||
animations {
|
||||
enabled = yes, please :)
|
||||
|
||||
# Animation Declaration Format:
|
||||
# "animation = NAME, ENABLE, SPEED, BEZIER [,STYLE]"
|
||||
# SPEED: in ds (where 1ds = 100ms)
|
||||
|
||||
# Default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more
|
||||
|
||||
bezier = easeOutQuint,0.23,1,0.32,1
|
||||
bezier = easeInOutCubic,0.65,0.05,0.36,1
|
||||
bezier = linear,0,0,1,1
|
||||
bezier = almostLinear,0.5,0.5,0.75,1.0
|
||||
bezier = quick,0.15,0,0.1,1
|
||||
|
||||
animation = global, 1, 10, default
|
||||
animation = border, 1, 5.39, easeOutQuint
|
||||
|
||||
#animation = windows, 1, 4.79, easeOutQuint
|
||||
#animation = windowsIn, 1, 4.1, easeOutQuint, popin 87%
|
||||
animation = windowsIn, 1, 4, linear, slide bottom
|
||||
# animation = windowsOut, 1, 1.49, linear, popin 87%
|
||||
animation = windowsOut, 1, 10, linear, popin
|
||||
|
||||
animation = fadeIn, 1, 1.73, almostLinear
|
||||
animation = fadeOut, 1, 1.46, almostLinear
|
||||
animation = fade, 1, 3.03, quick
|
||||
|
||||
animation = layers, 1, 3.81, easeOutQuint
|
||||
animation = layersIn, 1, 4, easeOutQuint, fade
|
||||
animation = layersOut, 1, 1.5, linear, fade
|
||||
|
||||
animation = fadeLayersIn, 1, 1.79, almostLinear
|
||||
animation = fadeLayersOut, 1, 1.39, almostLinear
|
||||
|
||||
animation = workspaces, 1, 1.94, almostLinear, fade
|
||||
animation = workspacesIn, 1, 1.21, almostLinear, fade
|
||||
animation = workspacesOut, 1, 1.94, almostLinear, fade
|
||||
}
|
||||
|
||||
# Ref https://wiki.hyprland.org/Configuring/Workspace-Rules/
|
||||
# "Smart gaps" / "No gaps when only"
|
||||
# uncomment all if you wish to use that.
|
||||
# workspace = w[t1], gapsout:0, gapsin:0
|
||||
# workspace = w[tg1], gapsout:0, gapsin:0
|
||||
# workspace = f[1], gapsout:0, gapsin:0
|
||||
# windowrulev2 = bordersize 0, floating:0, onworkspace:w[t1]
|
||||
# windowrulev2 = rounding 0, floating:0, onworkspace:w[t1]
|
||||
# windowrulev2 = bordersize 0, floating:0, onworkspace:w[tg1]
|
||||
# windowrulev2 = rounding 0, floating:0, onworkspace:w[tg1]
|
||||
# windowrulev2 = bordersize 0, floating:0, onworkspace:f[1]
|
||||
# windowrulev2 = rounding 0, floating:0, onworkspace:f[1]
|
||||
|
||||
# See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more
|
||||
dwindle {
|
||||
pseudotile = true # Master switch for pseudotiling. Enabling is bound to MOD + P in the keybinds section below
|
||||
preserve_split = true # You probably want this
|
||||
}
|
||||
|
||||
# See https://wiki.hyprland.org/Configuring/Master-Layout/ for more
|
||||
master {
|
||||
new_status = master
|
||||
}
|
||||
|
||||
# https://wiki.hyprland.org/Configuring/Variables/#misc
|
||||
misc {
|
||||
#force_default_wallpaper = -1 # Set to 0 or 1 to disable the anime mascot wallpapers
|
||||
disable_hyprland_logo = true # If true disables the random hyprland logo / anime girl background. :(
|
||||
disable_splash_rendering = true
|
||||
}
|
||||
|
||||
|
||||
#############
|
||||
### INPUT ###
|
||||
#############
|
||||
|
||||
# https://wiki.hyprland.org/Configuring/Variables/#input
|
||||
input {
|
||||
kb_layout = us
|
||||
kb_variant =
|
||||
kb_model =
|
||||
kb_options =
|
||||
kb_rules =
|
||||
|
||||
follow_mouse = 1
|
||||
|
||||
sensitivity = 0 # -1.0 - 1.0, 0 means no modification.
|
||||
|
||||
touchpad {
|
||||
natural_scroll = false
|
||||
}
|
||||
}
|
||||
|
||||
# https://wiki.hyprland.org/Configuring/Variables/#gestures
|
||||
gestures {
|
||||
workspace_swipe = true
|
||||
}
|
||||
|
||||
# Example per-device config
|
||||
# See https://wiki.hyprland.org/Configuring/Keywords/#per-device-input-configs for more
|
||||
#device {
|
||||
# name = epic-mouse-v1
|
||||
# sensitivity = -0.5
|
||||
#}
|
||||
|
||||
|
||||
###################
|
||||
### KEYBINDINGS ###
|
||||
###################
|
||||
|
||||
# See https://wiki.hyprland.org/Configuring/Keywords/
|
||||
$MOD = SUPER # Sets "Windows" key as main modifier
|
||||
|
||||
# Example binds, see https://wiki.hyprland.org/Configuring/Binds/ for more
|
||||
bind = $MOD, RETURN, exec, $terminal
|
||||
bind = $MOD, E, exec, $fileManager
|
||||
bind = $MOD, R, exec, $menu
|
||||
bind = $MOD, H, exec, $colorpicker
|
||||
|
||||
bind = $MOD, F, fullscreen
|
||||
bind = $MOD, V, togglefloating,
|
||||
bind = $MOD, P, pseudo, # dwindle
|
||||
bind = $MOD, J, togglesplit, # dwindle
|
||||
|
||||
bind = $MOD, C, killactive,
|
||||
#bind = $MOD, M, exit,
|
||||
|
||||
# Move focus with MOD + arrow keys
|
||||
bind = $MOD, left, movefocus, l
|
||||
bind = $MOD, right, movefocus, r
|
||||
bind = $MOD, up, movefocus, u
|
||||
bind = $MOD, down, movefocus, d
|
||||
|
||||
# Switch workspaces with MOD + [0-9]
|
||||
bind = $MOD, 1, workspace, 1
|
||||
bind = $MOD, 2, workspace, 2
|
||||
bind = $MOD, 3, workspace, 3
|
||||
bind = $MOD, 4, workspace, 4
|
||||
bind = $MOD, 5, workspace, 5
|
||||
bind = $MOD, 6, workspace, 6
|
||||
bind = $MOD, 7, workspace, 7
|
||||
bind = $MOD, 8, workspace, 8
|
||||
bind = $MOD, 9, workspace, 9
|
||||
bind = $MOD, 0, workspace, 10
|
||||
|
||||
# Move active window to a workspace with MOD + SHIFT + [0-9]
|
||||
bind = $MOD SHIFT, 1, movetoworkspace, 1
|
||||
bind = $MOD SHIFT, 2, movetoworkspace, 2
|
||||
bind = $MOD SHIFT, 3, movetoworkspace, 3
|
||||
bind = $MOD SHIFT, 4, movetoworkspace, 4
|
||||
bind = $MOD SHIFT, 5, movetoworkspace, 5
|
||||
bind = $MOD SHIFT, 6, movetoworkspace, 6
|
||||
bind = $MOD SHIFT, 7, movetoworkspace, 7
|
||||
bind = $MOD SHIFT, 8, movetoworkspace, 8
|
||||
bind = $MOD SHIFT, 9, movetoworkspace, 9
|
||||
bind = $MOD SHIFT, 0, movetoworkspace, 10
|
||||
|
||||
# Example special workspace (scratchpad)
|
||||
bind = $MOD, S, togglespecialworkspace, magic
|
||||
bind = $MOD SHIFT, S, movetoworkspace, special:magic
|
||||
|
||||
# Scroll through existing workspaces with MOD + scroll
|
||||
bind = $MOD, mouse_up, workspace, e-1
|
||||
bind = $MOD, mouse_down, workspace, e+1
|
||||
# Or with the keyboard
|
||||
bind = $MOD SHIFT, left, workspace, e-1
|
||||
bind = $MOD SHIFT, right, workspace, e+1
|
||||
|
||||
# Move/resize windows with MOD + LMB/RMB and dragging
|
||||
bindm = $MOD, mouse:272, movewindow
|
||||
bindm = $MOD, mouse:273, resizewindow
|
||||
|
||||
# Laptop multimedia keys for volume and LCD brightness
|
||||
bindel = ,XF86AudioRaiseVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+
|
||||
bindel = ,XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-
|
||||
bindel = ,XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle
|
||||
bindel = ,XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle
|
||||
bindel = ,XF86MonBrightnessUp, exec, brightnessctl s 10%+
|
||||
bindel = ,XF86MonBrightnessDown, exec, brightnessctl s 10%-
|
||||
|
||||
# Requires playerctl
|
||||
bindl = , XF86AudioNext, exec, playerctl next
|
||||
bindl = , XF86AudioPause, exec, playerctl play-pause
|
||||
bindl = , XF86AudioPlay, exec, playerctl play-pause
|
||||
bindl = , XF86AudioPrev, exec, playerctl previous
|
||||
|
||||
##############################
|
||||
### WINDOWS AND WORKSPACES ###
|
||||
##############################
|
||||
|
||||
# See https://wiki.hyprland.org/Configuring/Window-Rules/ for more
|
||||
# See https://wiki.hyprland.org/Configuring/Workspace-Rules/ for workspace rules
|
||||
|
||||
# Example windowrule v1
|
||||
# windowrule = float, ^(kitty)$
|
||||
|
||||
# Example windowrule v2
|
||||
# windowrulev2 = float,class:^(kitty)$,title:^(kitty)$
|
||||
|
||||
# Ignore maximize requests from apps. You'll probably like this.
|
||||
windowrulev2 = suppressevent maximize, class:.*
|
||||
|
||||
# Fix some dragging issues with XWayland
|
||||
windowrulev2 = nofocus,class:^$,title:^$,xwayland:1,floating:1,fullscreen:0,pinned:0
|
||||
25
docs/DEVDOC.md
Normal file
25
docs/DEVDOC.md
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
## Users
|
||||
|
||||
#### me
|
||||
My main personal account, used on my PC and laptop.
|
||||
Contains a hyprland graphical environment by default.
|
||||
|
||||
#### ae
|
||||
Primary account on my servers. Contains the bare
|
||||
essentials for my work, no graphical environment.
|
||||
|
||||
|
||||
#### friends
|
||||
A simple account I let me friends connect to.
|
||||
Limited functionality, mostly just for letting
|
||||
them test small things or for giving them files.
|
||||
|
||||
|
||||
## Setup Guide
|
||||
##### Adding a New Server
|
||||
Enable an ssh server on the remote host, then on the
|
||||
local machine set `.ssh/config` to have a profile for
|
||||
your desired host and have a key pair that's authorised
|
||||
to your desired user.
|
||||
|
||||
NOTE: these keys must have permission 600 (only readable/writable by you)
|
||||
67
docs/DEV_ENV.md
Normal file
67
docs/DEV_ENV.md
Normal file
|
|
@ -0,0 +1,67 @@
|
|||
This file will document what features I believe I need
|
||||
for NixOS to be a good development environment.
|
||||
|
||||
|
||||
Issues I've encountered:
|
||||
- [X] Audio not working
|
||||
- [X] Tesseract is a pain in the ass to setup on Nix
|
||||
- [ ] ags no longer supports `-t` flag, so applauncher won't work, requires switching to Astral
|
||||
- [ ] script to enable/disable passwordless sudo
|
||||
|
||||
- [X] Move Emile.Vault to new vault (I lost the password...)
|
||||
|
||||
- [X] Add a simple and ugly bar
|
||||
|
||||
- [ ] Install powertop (funny name) for monitoring power usage by processes
|
||||
- [ ] Try to make my battery life bettery
|
||||
|
||||
- [ ] Apply for JetBrains student license
|
||||
- [ ] JetBrains Rider and VSCodium for C#
|
||||
2. Imperative development environment behind NixOS (declarative),
|
||||
similar to python's virtualenv but for the entirety of my system.
|
||||
|
||||
- [X] Call my wishlist command "subspace (highway)" (Scott Pilgrim reference)
|
||||
|
||||
- [ ] Create a GitHub profile readme like this persons:
|
||||
https://github.com/yuyudhn
|
||||
- [ ] Set a new GitHub profile picture (like github:@Vendicated)
|
||||
artists credit: https://dotpict.net/users/1598051
|
||||
- [ ] Change GitHub location to /dev/zero, /dev/null, www, World Wide Web, etc
|
||||
- [ ] Clean up my GitHub profile (only have things I'm proud of)
|
||||
|
||||
- [X] Put a template website on my VPS
|
||||
- [ ] Put a neoweb-esque webiste on my VPS
|
||||
- [ ] Host a blog on my VPS
|
||||
|
||||
- [ ] Clean laptop and PC, there's tons of unnecessary files and documents now
|
||||
- [ ] Clean nixdots repo, start modularising it ^_^
|
||||
- [ ] Disable `allowUnfree` in nixdots everywhere, if a program needs it then they
|
||||
can `mkForce` override it
|
||||
|
||||
- [X] Add LSP for Nix in helix
|
||||
- [ ] Make a way for me to put my laptop in a low power state, doing very specific actions like:
|
||||
1. disabling LSP use by default temporarily
|
||||
|
||||
- [ ] Add https://github.com/levnikmyskin/hyprland-virtual-desktops
|
||||
|
||||
TODO:
|
||||
- [X] make btop theming declarative
|
||||
- [X] Merge laptop and PC dotfiles repos
|
||||
- [ ] declaratively install themes for gitkraken using home-manager
|
||||
|
||||
Cool Technologies:
|
||||
- wishlist (by charmbracelet)
|
||||
- Vaultwarden server + Keyguard client
|
||||
- devbox
|
||||
|
||||
|
||||
|
||||
Random Idea List:
|
||||
- [ ] powertop is cool but it's outdated and ugly, make a prettier one with charmbracelet's tui library
|
||||
and call it powerbtm lmao
|
||||
- [ ] Blog Post: a modern alternative to the suckless philosphy,
|
||||
why GNU keeps failing cause their programs are amazing but
|
||||
aren't designed for humans. suckless programs are excellent
|
||||
too when writing shell scripts, but they suck in dev environments.
|
||||
The solution is to gamify our code and focus on aesthetics
|
||||
and "ergonomics" (usability) like what CharmBracelet does
|
||||
5
docs/PROBLEMLOG.md
Normal file
5
docs/PROBLEMLOG.md
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
180GB of disk space were used by my system which seemed absurd. Running the NixOS
|
||||
garbage collector only removed 7GB. The rest was found via:
|
||||
`du -hs ./.local/share/Games/drive_c/Program\ Files\ \(x86\)/Steam/dumps/reports/*`
|
||||
tldr: there were 2714 30MB crash report files generated every minute of May 2nd 2025 (10 days ago)
|
||||
SOLUTION: delete them all and hope it doesn't happen again
|
||||
91
docs/TODO.md
Executable file
91
docs/TODO.md
Executable file
|
|
@ -0,0 +1,91 @@
|
|||
Get Utilities:
|
||||
1. httpie
|
||||
2. curlie
|
||||
3. zoxide
|
||||
4. doggo
|
||||
|
||||
1. Get helix editor
|
||||
2. Custom helix
|
||||
3. Complete helix tutorial
|
||||
|
||||
Get nixcord working
|
||||
Get thunar working
|
||||
Set a GTK theme & icon theme
|
||||
Get better wallpapers
|
||||
Get hyprcursor working with Bibata-Modern-Ice
|
||||
|
||||
Get a GRUB theme working
|
||||
Get SDDM and a theme working
|
||||
|
||||
Make a custom hyprlock screen
|
||||
|
||||
Get AGS working
|
||||
Make an applauncher in AGS
|
||||
Remove hyprland splash screen on init
|
||||
Made lolcathost home modular
|
||||
|
||||
Overtime just install more programs that I need regularly: ie
|
||||
- btop/htop/etc
|
||||
|
||||
Get GTK Bibata Cursors to be the same size as my system cursor (NOT SURE WHAT I DID...)
|
||||
|
||||
|
||||
Get waybar (or another bar) working
|
||||
|
||||
Get a QT theme
|
||||
|
||||
Fix pipewire audio sometimes working and sometimes not :(
|
||||
|
||||
Bind new terminal to SUPER+Enter instead of SUPER+Q
|
||||
|
||||
Join Rio Terminal's discord and ask if they support nerdfonts or if I'm doing something wrong
|
||||
|
||||
|
||||
|
||||
Change Dell loading screen (Boot Graphics Resource Table, aka BGRT)
|
||||
|
||||
|
||||
|
||||
|
||||
Fix: your 131072x1 screen size is bogus. expect trouble
|
||||
|
||||
|
||||
|
||||
Search for all "TODO" items in my nix dotfiles
|
||||
|
||||
Push nixdots to github
|
||||
|
||||
|
||||
|
||||
|
||||
Check out the Ekala Project (I joined their discord server)
|
||||
|
||||
|
||||
Create a program that enables/disables passwordless sudo access
|
||||
(add to github too)
|
||||
|
||||
Learn to package my own home-manager modules
|
||||
|
||||
|
||||
|
||||
|
||||
Ideal Features:
|
||||
1. AI assistant
|
||||
2. searching can also be used to calculate stuff (like I do on my iPad)
|
||||
|
||||
|
||||
|
||||
|
||||
Fork nixcord and fix documentation (the installation is confusing)
|
||||
But firstly the first code snippet is wrong...
|
||||
```nix
|
||||
inputs.nixcord = {
|
||||
url = "github:kaylorben/nixcord"
|
||||
};
|
||||
```
|
||||
Should actually be
|
||||
```nix
|
||||
inputs.nixcord = {
|
||||
url = "github:kaylorben/nixcord"; # dont forget the semicolon
|
||||
};
|
||||
```
|
||||
3
docs/TODO_UI.md
Executable file
3
docs/TODO_UI.md
Executable file
|
|
@ -0,0 +1,3 @@
|
|||
1. Create more themes for my applauncher
|
||||
2. Create more themes for hyprlock
|
||||
check out: https://github.com/MrVivekRajan/Hyprlock-Styles
|
||||
12
docs/inspiration.md
Executable file
12
docs/inspiration.md
Executable file
|
|
@ -0,0 +1,12 @@
|
|||
Godlike
|
||||
https://github.com/end-4/dots-hyprland
|
||||
|
||||
Gorgeous
|
||||
https://github.com/prasanthrangan/hyprdots
|
||||
|
||||
Very nice
|
||||
https://github.com/linuxmobile/hyprland-dots
|
||||
|
||||
|
||||
I love their hyprpanel!
|
||||
https://www.reddit.com/r/unixporn/comments/1ha3mjw/hyprlandnixos_is_the_pretty_ucking_solid_i_love/
|
||||
2
docs/nixos_notes.md
Normal file
2
docs/nixos_notes.md
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
Building specific parts of a NixOS system
|
||||
https://nixos.org/manual/nixos/stable/#sec-building-parts
|
||||
43
flake.lock
generated
43
flake.lock
generated
|
|
@ -40,11 +40,11 @@
|
|||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1770316708,
|
||||
"narHash": "sha256-i9oEi2PUIZfp+73ZvQE/Ze0aCEV3y3+vvaJ/ZmAe3bw=",
|
||||
"lastModified": 1770121583,
|
||||
"narHash": "sha256-BI9UgaWtIHqyV8L4Vfh5Vrakax65QOG6m0a28L05YzM=",
|
||||
"ref": "refs/heads/main",
|
||||
"rev": "955746af205e2a94a8e0798a911941da9c5af779",
|
||||
"revCount": 117,
|
||||
"rev": "d511138e76f03990da593d1d0129f58c1ec3f570",
|
||||
"revCount": 100,
|
||||
"type": "git",
|
||||
"url": "https://forge.dobutterfliescry.net/cry/site"
|
||||
},
|
||||
|
|
@ -104,22 +104,6 @@
|
|||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nix-flatpak": {
|
||||
"locked": {
|
||||
"lastModified": 1767983141,
|
||||
"narHash": "sha256-7ZCulYUD9RmJIDULTRkGLSW1faMpDlPKcbWJLYHoXcs=",
|
||||
"owner": "gmodena",
|
||||
"repo": "nix-flatpak",
|
||||
"rev": "440818969ac2cbd77bfe025e884d0aa528991374",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "gmodena",
|
||||
"ref": "v0.7.0",
|
||||
"repo": "nix-flatpak",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nix-github-actions": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
|
|
@ -143,11 +127,11 @@
|
|||
},
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1770536720,
|
||||
"narHash": "sha256-pbmbaQUuoG+v37b91lqcNcz05YUvVif7iWjIx9lF8R4=",
|
||||
"lastModified": 1761269590,
|
||||
"narHash": "sha256-yTr+PCi4wGbOEidrm8XyXBobLxLMqIBsbUyhwsN6wrc=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "3c64ab24b22579c833895b6030c9563837e41a70",
|
||||
"rev": "d792a6e0cd4ba35c90ea787b717d72410f56dc40",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
@ -159,11 +143,11 @@
|
|||
},
|
||||
"nixpkgs-unstable": {
|
||||
"locked": {
|
||||
"lastModified": 1770197578,
|
||||
"narHash": "sha256-AYqlWrX09+HvGs8zM6ebZ1pwUqjkfpnv8mewYwAo+iM=",
|
||||
"lastModified": 1761114652,
|
||||
"narHash": "sha256-f/QCJM/YhrV/lavyCVz8iU3rlZun6d+dAiC3H+CDle4=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "00c21e4c93d963c50d4c0c89bfa84ed6e0694df2",
|
||||
"rev": "01f116e4df6a15f4ccdffb1bcd41096869fb385c",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
@ -175,11 +159,11 @@
|
|||
},
|
||||
"nixpkgs_2": {
|
||||
"locked": {
|
||||
"lastModified": 1767313136,
|
||||
"narHash": "sha256-16KkgfdYqjaeRGBaYsNrhPRRENs0qzkQVUooNHtoy2w=",
|
||||
"lastModified": 1761016216,
|
||||
"narHash": "sha256-G/iC4t/9j/52i/nm+0/4ybBmAF4hzR8CNHC75qEhjHo=",
|
||||
"owner": "nixos",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "ac62194c3917d5f474c1a844b6fd6da2db95077d",
|
||||
"rev": "481cf557888e05d3128a76f14c76397b7d7cc869",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
@ -194,7 +178,6 @@
|
|||
"colmena": "colmena",
|
||||
"dobutterfliescry-net": "dobutterfliescry-net",
|
||||
"grub2-themes": "grub2-themes",
|
||||
"nix-flatpak": "nix-flatpak",
|
||||
"nixpkgs": "nixpkgs_2",
|
||||
"nixpkgs-unstable": "nixpkgs-unstable",
|
||||
"systems": "systems_2"
|
||||
|
|
|
|||
|
|
@ -16,8 +16,6 @@
|
|||
};
|
||||
};
|
||||
|
||||
nix-flatpak.url = "github:gmodena/nix-flatpak/?ref=v0.7.0";
|
||||
|
||||
grub2-themes.url = "github:vinceliuice/grub2-themes";
|
||||
|
||||
dobutterfliescry-net = {
|
||||
|
|
|
|||
87
homes/subspace/default.nix
Normal file
87
homes/subspace/default.nix
Normal file
|
|
@ -0,0 +1,87 @@
|
|||
{
|
||||
inputs,
|
||||
outputs,
|
||||
lib,
|
||||
config,
|
||||
pkgs,
|
||||
...
|
||||
}: {
|
||||
nixpkgs = {
|
||||
config.allowUnfree = false;
|
||||
};
|
||||
|
||||
imports = [
|
||||
];
|
||||
|
||||
home = {
|
||||
username = "subspace";
|
||||
homeDirectory = "/home/subspace";
|
||||
};
|
||||
|
||||
programs = {
|
||||
fish = {
|
||||
enable = true;
|
||||
# Extra commands to run when entering a interactive shell
|
||||
# (for the subspace user this will be exiting fish to
|
||||
# run wishlist instead, a shell should not pop up!)
|
||||
loginShellInit = ''
|
||||
clear
|
||||
exec wishlist
|
||||
'';
|
||||
};
|
||||
|
||||
ssh = {
|
||||
enable = true;
|
||||
forwardAgent = true;
|
||||
addKeysToAgent = "yes";
|
||||
|
||||
matchBlocks = {
|
||||
hyrule = {
|
||||
hostname = "imbored.dev";
|
||||
user = "ae";
|
||||
port = 22;
|
||||
identityFile = "~/.ssh/id_hyrule";
|
||||
setEnv = {
|
||||
TERM = "linux";
|
||||
};
|
||||
};
|
||||
dead = {
|
||||
hostname = "deadlyserver.com";
|
||||
user = "emile";
|
||||
port = 29843;
|
||||
identityFile = "~/.ssh/id_deadlyserver";
|
||||
setEnv = {
|
||||
TERM = "xterm-256color";
|
||||
};
|
||||
};
|
||||
youcue = {
|
||||
hostname = "moss.labs.eait.uq.edu.au";
|
||||
user = "s4740056";
|
||||
port = 22;
|
||||
identityFile = "~/.ssh/id_youcue";
|
||||
setEnv = {
|
||||
TERM = "xterm-256color";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
# Nicely reload system units when changing configs
|
||||
systemd.user.startServices = "sd-switch";
|
||||
|
||||
# SERVICE: webfishing (example for wishlist)
|
||||
#systemd.user.services.webfishing = {
|
||||
# Unit.Description = "I be out here webfishing frfr";
|
||||
|
||||
# Install.WantedBy = ["default.target"];
|
||||
|
||||
# Service = {
|
||||
# Type = "exec";
|
||||
# ExecStart = "echo $HOME; cat $HOME/.ssh/config";
|
||||
# Restart = "always";
|
||||
# };
|
||||
#};
|
||||
|
||||
home.stateVersion = "24.11"; # DO NOT MODIFY
|
||||
}
|
||||
|
|
@ -129,12 +129,6 @@ in {
|
|||
wishlist
|
||||
];
|
||||
};
|
||||
|
||||
friends = {
|
||||
isNormalUser = true;
|
||||
shell = pkgs.fish;
|
||||
home = "/home/friends";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
|
|
@ -186,7 +180,6 @@ in {
|
|||
git
|
||||
vim
|
||||
helix
|
||||
tcpdump
|
||||
];
|
||||
|
||||
system.stateVersion = "24.11"; # DO NOT MODIFY
|
||||
|
|
|
|||
|
|
@ -27,8 +27,6 @@ in {
|
|||
|
||||
#../modules/flipperzero.nix
|
||||
#../modules/chameleonultragui.nix
|
||||
|
||||
inputs.nix-flatpak.nixosModules.nix-flatpak
|
||||
];
|
||||
|
||||
nix.settings = {
|
||||
|
|
@ -146,8 +144,6 @@ in {
|
|||
|
||||
# ----- SERVICES -----
|
||||
services = {
|
||||
flatpak.enable = true;
|
||||
|
||||
# Set display manager (login screen)
|
||||
displayManager = {
|
||||
# sddm relies on pkgs.libsForQt5.qt5.qtgraphicaleffects
|
||||
|
|
@ -333,7 +329,6 @@ in {
|
|||
gobuster
|
||||
nth
|
||||
zap
|
||||
wireguard-tools
|
||||
|
||||
httpie
|
||||
curlie
|
||||
|
|
@ -381,7 +376,6 @@ in {
|
|||
# Games
|
||||
prismlauncher # minecraft
|
||||
pkgs-unstable.olympus
|
||||
discord
|
||||
];
|
||||
|
||||
# DEBUG: configuring xdg portal here instead?
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue