This commit is contained in:
EdenQwQ 2025-04-29 14:16:34 +08:00
parent d9cd5c6486
commit ced09b9dcd
9 changed files with 579 additions and 2 deletions

View file

@ -6,6 +6,7 @@
./mako.nix
./niri
./swhkd.nix
./scroll
];
home.packages = with pkgs; [
swww

View file

@ -0,0 +1,418 @@
{ config, ... }:
let
outputConf =
builtins.attrNames config.monitors
|> map (
name:
with config.monitors.${name};
"output ${name} resolution ${toString mode.width}x${toString mode.height} position ${toString position.x},${toString position.y} scale ${toString scale} transform ${360 - rotation |> toString}"
)
|> builtins.concatStringsSep "\n";
in
{
xdg.configFile."scroll/config".text = with config.lib.stylix.colors; ''
# Default config for scroll
#
# Copy this to ~/.config/scroll/config and edit it to your liking.
#
# Read `man 5 scroll` for a complete reference.
### Variables
#
# Logo key. Use Mod1 for Alt.
set $mod Mod4
# Home row direction keys, like vim
set $left h
set $down j
set $up k
set $right l
# Your preferred terminal emulator
set $term kitty
# Your preferred application launcher
set $menu sh -c $(tofi-run)
### Output configuration
#
# Default wallpaper (more resolutions are available in @datadir@/backgrounds/scroll/)
# output * bg @datadir@/backgrounds/scroll/Sway_Wallpaper_Blue_1920x1080.png fill
#
# Example configuration:
#
# output HDMI-A-1 resolution 1920x1080 position 1920,0
#
# You can get the names of your outputs by running: scrollmsg -t get_outputs
${outputConf}
# output HDMI-A-1 resolution 2560x1600 position 0,60 scale 1.6 transform 270
# output eDP-1 resolution 2240x1400 position 1000,0 scale 1.6
### Idle configuration
#
# Example configuration:
#
# exec swayidle -w \
# timeout 300 'swaylock -f -c 000000' \
# timeout 600 'scrollmsg "output * power off"' resume 'scrollmsg "output * power on"' \
# before-sleep 'swaylock -f -c 000000'
#
# This will lock your screen after 300 seconds of inactivity, then turn off
# your displays after another 300 seconds, and turn your screens back on when
# resumed. It will also lock your screen before your computer goes to sleep.
### Input configuration
#
# Example configuration:
#
# input "2:14:SynPS/2_Synaptics_TouchPad" {
# dwt enabled
# tap enabled
# natural_scroll enabled
# middle_emulation enabled
# }
#
# You can get the names of your inputs by running: scrollmsg -t get_inputs
# Read `man 5 scroll-input` for more information about this section.
input "1267:12815:VEN_04F3:00_04F3:320F_Touchpad" {
tap enabled
drag_lock disabled
}
### Windows defaults
default_border pixel 4
gaps inner 5
gaps outer 5
client.focused ${base0E} ${base01} ${base05} ${base0A} ${base0E}
client.focused_inactive ${base03} ${base01} ${base05} ${base0A} ${base03}
client.unfocused ${base03} ${base01} ${base05} ${base0A} ${base03}
# Idle inhibit for fullscreen windows
for_window [all] inhibit_idle fullscreen
# Layout settings
layout_default_width 0.666666667
layout_default_height 1.0
layout_widths [0.33333333 0.5 0.666666667 1.0]
layout_heights [0.33333333 0.5 0.666666667 1.0]
fullscreen_movefocus true
### Key bindings
#
# Basics:
#
# Start a terminal
bindsym $mod+Return exec $term
# Kill focused window
bindsym $mod+q kill
# Start your launcher
bindsym $mod+p exec $menu
# Drag floating windows by holding down $mod and left mouse button.
# Resize them with right mouse button + $mod.
# Despite the name, also works for non-floating windows.
# Change normal to inverse to use left mouse button for resizing and right
# mouse button for dragging.
floating_modifier $mod normal
# Reload the configuration file
bindsym $mod+Shift+c reload
# Exit scroll (logs you out of your Wayland session)
bindsym $mod+Shift+x exec scrollnag -t warning -m 'You pressed the exit shortcut. Do you really want to exit scroll? This will end your Wayland session.' -B 'Yes, exit scroll' 'scrollmsg exit'
# Layout mode
bindsym $mod+alt+h set_mode h
bindsym $mod+alt+v set_mode v
#
# Moving around:
#
# Move your focus around
bindsym $mod+$left focus left
bindsym $mod+$down focus down
bindsym $mod+$up focus up
bindsym $mod+$right focus right
bindsym $mod+home focus beginning
bindsym $mod+end focus end
# Move the focused window with the same, but add Ctrl
bindsym $mod+Shift+$left move left
bindsym $mod+Shift+$down move down
bindsym $mod+Shift+$up move up
bindsym $mod+Shift+$right move right
bindsym $mod+Shift+home move beginning
bindsym $mod+Shift+end move end
# # nomode
# bindsym $mod+Alt+$left move left nomode
# bindsym $mod+Alt+$down move down nomode
# bindsym $mod+Alt+$up move up nomode
# bindsym $mod+Alt+$right move right nomode
# bindsym $mod+Alt+home move beginning nomode
# bindsym $mod+Alt+end move end nomode
# Focus other monitors
bindsym $mod+Ctrl+$left focus output left
bindsym $mod+Ctrl+$down focus output down
bindsym $mod+Ctrl+$up focus output up
bindsym $mod+Ctrl+$right focus output right
#
# Workspaces:
#
# Switch to workspace
bindsym $mod+1 workspace number 1
bindsym $mod+2 workspace number 2
bindsym $mod+3 workspace number 3
bindsym $mod+4 workspace number 4
bindsym $mod+5 workspace number 5
bindsym $mod+6 workspace number 6
bindsym $mod+7 workspace number 7
bindsym $mod+8 workspace number 8
bindsym $mod+9 workspace number 9
bindsym $mod+0 workspace number 10
# Move focused container to workspace
bindsym $mod+Shift+1 move container to workspace number 1; workspace number 1
bindsym $mod+Shift+2 move container to workspace number 2; workspace number 2
bindsym $mod+Shift+3 move container to workspace number 3; workspace number 3
bindsym $mod+Shift+4 move container to workspace number 4; workspace number 4
bindsym $mod+Shift+5 move container to workspace number 5; workspace number 5
bindsym $mod+Shift+6 move container to workspace number 6; workspace number 6
bindsym $mod+Shift+7 move container to workspace number 7; workspace number 7
bindsym $mod+Shift+8 move container to workspace number 8; workspace number 8
bindsym $mod+Shift+9 move container to workspace number 9; workspace number 9
bindsym $mod+Shift+0 move container to workspace number 10; workspace number 10
# Note: workspaces can have any name you want, not just numbers.
# We just use 1-10 as the default.
bindsym $mod+Ctrl+1 move workspace to output left
bindsym $mod+Ctrl+2 move workspace to output right
# Scaling
# Workspace
bindsym $mod+Shift+comma scale_workspace incr -0.05
bindsym --whole-window $mod+Shift+button4 scale_workspace incr -0.05
bindsym $mod+Shift+period scale_workspace incr 0.05
bindsym --whole-window $mod+Shift+button5 scale_workspace incr 0.05
bindsym $mod+Shift+Ctrl+period scale_workspace reset
# Overview
bindsym --no-repeat $mod+w scale_workspace overview
bindsym --whole-window button8 scale_workspace overview
# Jump
# jump_labels_color #9e1530FF
# jump_labels_background #15309eFF
# jump_labels_scale 0.9
# jump_labels_keys asdf
bindsym --no-repeat $mod+slash jump
# Content
bindsym $mod+comma scale_content incr -0.05
bindsym --whole-window $mod+button4 scale_content incr -0.05
bindsym $mod+period scale_content incr 0.05
bindsym --whole-window $mod+button5 scale_content incr 0.05
bindsym $mod+Ctrl+period scale_content reset
#
# Layout stuff:
#
# Make the current focus fullscreen
bindsym $mod+f fullscreen
bindsym $mod+Ctrl+f fullscreen global
# Toggle the current focus between tiling and floating mode
bindsym $mod+y focus mode_toggle
# Float a window
bindsym $mod+Shift+f floating toggle
# Toggle sticky
bindsym $mod+a sticky toggle
# Marks
# bindsym $mod+m exec scroll-mark-toggle.sh
# bindsym $mod+Shift+m exec scroll-mark-remove.sh
# bindsym $mod+apostrophe exec scroll-mark-switch.sh
#
# Scratchpad:
#
# Scroll has a "scratchpad", which is a bag of holding for windows.
# You can send windows there and get them back later.
# Move the currently focused window to the scratchpad
bindsym $mod+Shift+z move scratchpad
# Show the next scratchpad window or hide the focused scratchpad window.
# If there are multiple scratchpad windows, this command cycles through them.
bindsym $mod+z scratchpad show
#
# Mode modifiers
#
# mode "modifiers" {
# bindsym $right set_mode after; mode default
# bindsym $left set_mode before; mode default
# bindsym home set_mode beginning; mode default
# bindsym end set_mode end; mode default
# bindsym $up set_mode focus; mode default
# bindsym $down set_mode nofocus; mode default
# bindsym h set_mode center_horiz; mode default
# bindsym Shift+h set_mode nocenter_horiz; mode default
# bindsym v set_mode center_vert; mode default
# bindsym Shift+v set_mode nocenter_vert; mode default
# bindsym r set_mode reorder_auto; mode default
# bindsym Shift+r set_mode noreorder_auto; mode default
#
# # Return to default mode
# bindsym Escape mode "default"
# }
# bindsym $mod+backslash mode "modifiers"
#
# Resizing containers:
#
bindsym $mod+minus cycle_size h prev
bindsym $mod+equal cycle_size h next
bindsym $mod+Shift+minus cycle_size v prev
bindsym $mod+Shift+equal cycle_size v next
mode "setsizeh" {
bindsym 1 set_size h 0.125
bindsym 2 set_size h 0.1666666667
bindsym 3 set_size h 0.25
bindsym 4 set_size h 0.333333333
bindsym 5 set_size h 0.375
bindsym 6 set_size h 0.5
bindsym 7 set_size h 0.625
bindsym 8 set_size h 0.6666666667
bindsym 9 set_size h 0.75
bindsym 0 set_size h 0.833333333
bindsym minus set_size h 0.875
bindsym equal set_size h 1.0
# Return to default mode
bindsym Escape mode "default"
}
bindsym $mod+b mode "setsizeh"
mode "setsizev" {
bindsym 1 set_size v 0.125
bindsym 2 set_size v 0.1666666667
bindsym 3 set_size v 0.25
bindsym 4 set_size v 0.333333333
bindsym 5 set_size v 0.375
bindsym 6 set_size v 0.5
bindsym 7 set_size v 0.625
bindsym 8 set_size v 0.6666666667
bindsym 9 set_size v 0.75
bindsym 0 set_size v 0.833333333
bindsym minus set_size v 0.875
bindsym equal set_size v 1.0
# Return to default mode
bindsym Escape mode "default"
}
bindsym $mod+Shift+b mode "setsizev"
mode "resize" {
# left will shrink the containers width
# right will grow the containers width
# up will shrink the containers height
# down will grow the containers height
bindsym $left resize shrink width 100px
bindsym $down resize grow height 100px
bindsym $up resize shrink height 100px
bindsym $right resize grow width 100px
# Return to default mode
bindsym Escape mode "default"
}
bindsym $mod+Shift+r mode "resize"
mode "align" {
bindsym c align center; mode default
bindsym m align middle; mode default
bindsym r align reset; mode default
bindsym $left align left; mode default
bindsym $right align right; mode default
bindsym $up align up; mode default
bindsym $down align down; mode default
bindsym Escape mode "default"
}
bindsym $mod+c mode "align"
# mode "fit_size" {
# bindsym w fit_size h visible proportional; mode default
# bindsym Shift+w fit_size v visible proportional; mode default
# bindsym Ctrl+w fit_size h visible equal; mode default
# bindsym Ctrl+Shift+w fit_size v visible equal; mode default
#
# bindsym $right fit_size h toend proportional; mode default
# bindsym Shift+$right fit_size v toend proportional; mode default
# bindsym Ctrl+$right fit_size h toend equal; mode default
# bindsym Ctrl+Shift+$right fit_size v toend equal; mode default
#
# bindsym $left fit_size h tobeg proportional; mode default
# bindsym Shift+$left fit_size v tobeg proportional; mode default
# bindsym Ctrl+$left fit_size h tobeg equal; mode default
# bindsym Ctrl+Shift+$left fit_size v tobeg equal; mode default
#
# bindsym $up fit_size h active proportional; mode default
# bindsym Shift+$up fit_size v active proportional; mode default
# #bindsym Ctrl+$up fit_size h active equal; mode default
# #bindsym Ctrl+Shift+$up fit_size v active equal; mode default
#
# bindsym $down fit_size h all proportional; mode default
# bindsym Shift+$down fit_size v all proportional; mode default
# bindsym Ctrl+$down fit_size h all equal; mode default
# bindsym Ctrl+Shift+$down fit_size v all equal; mode default
# }
# bindsym $mod+w mode "fit_size"
#
# Utilities:
#
# Special keys to adjust volume via PulseAudio
bindsym --locked XF86AudioMute exec pactl set-sink-mute \@DEFAULT_SINK@ toggle
bindsym --locked XF86AudioLowerVolume exec pactl set-sink-volume \@DEFAULT_SINK@ -5%
bindsym --locked XF86AudioRaiseVolume exec pactl set-sink-volume \@DEFAULT_SINK@ +5%
bindsym --locked XF86AudioMicMute exec pactl set-source-mute \@DEFAULT_SOURCE@ toggle
# Special keys to adjust brightness via brightnessctl
bindsym --locked XF86MonBrightnessDown exec brightnessctl set 5%-
bindsym --locked XF86MonBrightnessUp exec brightnessctl set 5%+
# Special key to take a screenshot with grim
bindsym Print exec grim
focus_wrapping no
bindgesture swipe:4:right workspace next
bindgesture swipe:4:left workspace prev
bindgesture swipe:4:up scale_workspace overview
bindgesture swipe:4:down jump
bindgesture swipe:3:right focus right
bindgesture swipe:3:left focus left
bindgesture swipe:3:up focus up
bindgesture swipe:3:down focus down
#
# Status Bar:
#
# Read `man 5 scroll-bar` for more information about this section.
# bar {
# position top
#
# # When the status_command prints a new line to stdout, scrollbar updates.
# # The default just shows the current date and time.
# status_command while date +'%Y-%m-%d %X'; do sleep 1; done
#
# colors {
# statusline #ffffff
# background #323232
# inactive_workspace #32323200 #32323200 #5c5c5c
# }
# }
#
# include @sysconfdir@/scroll/config.d/*
'';
}

View file

@ -7,10 +7,10 @@
"everforest"
"petrichor-downpour"
{
name = "frieren-butterflies-dark";
name = "celestia-lunar-dark";
fromImage = {
enable = true;
image = "frieren-butterflies.jpg";
image = "celestia-lunar.jpg";
method = "matugen";
passthru.scheme = "scheme-expressive";
};

View file

@ -65,5 +65,9 @@
name = "zzzzoka-gbc.jpg";
convertMethod = "gonord";
}
{
name = "celestia-lunar.jpg";
convertMethod = "lutgen";
}
];
}

View file

@ -17,6 +17,8 @@ let
languageserver
styler
openxlsx
ez
multicmp
];
in
{

View file

@ -56,6 +56,11 @@ let
url = "https://i.imgur.com/qE6Pr45.jpg";
sha256 = "1li5ypdvlvdpihiplf5mjj0lvf9gbcwyjslpxgla6wz0fzrwnvgi";
}
{
name = "celestia-lunar.jpg";
url = "https://i.imgur.com/QIhYwtH.jpg";
sha256 = "04dsm4dpv2mddzw7vw77bb0s2mkd4n54hnfa277181smnns7cdzz";
}
];
wallpaperSrcs = map fetchurl wallpapers;

View file

@ -1,4 +1,9 @@
{
python-basic = {
path = ./python-basic;
description = "Python with basic modules for organizing data";
};
python-analyze = {
path = ./python-analyze;
description = "Python with modules for analyzing data";

96
templates/python-basic/flake.lock generated Normal file
View file

@ -0,0 +1,96 @@
{
"nodes": {
"flake-parts": {
"inputs": {
"nixpkgs-lib": "nixpkgs-lib"
},
"locked": {
"lastModified": 1741352980,
"narHash": "sha256-+u2UunDA4Cl5Fci3m7S643HzKmIDAe+fiXrLqYsR2fs=",
"owner": "hercules-ci",
"repo": "flake-parts",
"rev": "f4330d22f1c5d2ba72d3d22df5597d123fdb60a9",
"type": "github"
},
"original": {
"owner": "hercules-ci",
"repo": "flake-parts",
"type": "github"
}
},
"nixpkgs": {
"locked": {
"lastModified": 1739451785,
"narHash": "sha256-3ebRdThRic9bHMuNi2IAA/ek9b32bsy8F5R4SvGTIog=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "1128e89fd5e11bb25aedbfc287733c6502202ea9",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixpkgs-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs-lib": {
"locked": {
"lastModified": 1740877520,
"narHash": "sha256-oiwv/ZK/2FhGxrCkQkB83i7GnWXPPLzoqFHpDD3uYpk=",
"owner": "nix-community",
"repo": "nixpkgs.lib",
"rev": "147dee35aab2193b174e4c0868bd80ead5ce755c",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "nixpkgs.lib",
"type": "github"
}
},
"nixpkgs_2": {
"locked": {
"lastModified": 1735554305,
"narHash": "sha256-zExSA1i/b+1NMRhGGLtNfFGXgLtgo+dcuzHzaWA6w3Q=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "0e82ab234249d8eee3e8c91437802b32c74bb3fd",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixpkgs-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"root": {
"inputs": {
"flake-parts": "flake-parts",
"nixpkgs": "nixpkgs",
"treefmt-nix": "treefmt-nix"
}
},
"treefmt-nix": {
"inputs": {
"nixpkgs": "nixpkgs_2"
},
"locked": {
"lastModified": 1742370146,
"narHash": "sha256-XRE8hL4vKIQyVMDXykFh4ceo3KSpuJF3ts8GKwh5bIU=",
"owner": "numtide",
"repo": "treefmt-nix",
"rev": "adc195eef5da3606891cedf80c0d9ce2d3190808",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "treefmt-nix",
"type": "github"
}
}
},
"root": "root",
"version": 7
}

View file

@ -0,0 +1,46 @@
{
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
flake-parts.url = "github:hercules-ci/flake-parts";
treefmt-nix.url = "github:numtide/treefmt-nix";
};
outputs =
{ ... }@inputs:
inputs.flake-parts.lib.mkFlake { inherit inputs; } {
systems = [ "x86_64-linux" ];
imports = [
inputs.treefmt-nix.flakeModule
];
perSystem =
{ pkgs, ... }:
{
devShells = {
default =
let
python = pkgs.python312;
in
pkgs.mkShellNoCC {
buildInputs = [
(python.withPackages (
ps: with ps; [
numpy
pandas
openpyxl
scipy
]
))
];
shellHook = ''
fish
'';
};
};
treefmt = {
projectRootFile = "flake.nix";
programs.nixfmt.enable = true;
programs.ruff-format.enable = true;
};
};
};
}