
Everything posted by Blogger
-
14 Themes for Beautifying Your Ghostty Terminal
by: Sreenath Mon, 08 Sep 2025 02:42:45 GMT Ghostty has recently emerged as a highly popular terminal emulator, gaining a strong following among developers and power users alike. This rapid rise can be attributed to its impressive performance and a rich feature set, like leveraging GPU acceleration for incredibly fast rendering and a smooth user experience, even with demanding tasks. Performance is one thing. Ghostty also comes with a comprehensive theming system, offering a vast collection of built-in themes, which can also be previewed even before you apply them. That's cool. That's a really cool feature. After fiddling with Kitty terminal, I am exploring Ghostty terminal these days and decided to share some of my exploits on It's FOSS. And hence this article, where I'll show how you can change themes in the Ghostty terminal, even the external ones. Later, I'll share some of my favorite Ghostty themes that will make your terminal both aesthetically pleasing and extremely readable. But first, learn to preview a theme in GhosttyGhostty has a neat theme preview system built-in. Open the terminal and run: ghostty +list-themes This opens the theme preview, from which you can note the name of a theme you like. You cannot set a theme from here but if you have the name, you can use it in the config as I show in the next section. 0:00 /0:13 1× Use the / key to start a search. Press Ctrl+C to close the theme preview. 💡you can also use another terminal emulator to preview Ghostty themes.Next, learn to change themes in GhosttyGhostty has relatively straight-forward text-based configuration. All you need is a configuration file called config at ~/.config/ghostty. Create this file if it does not exist. mkdir -p ~/.config/ghostty nano ~/.config/ghostty/config Add the name of the theme of your choice in the following manner: theme = "<name-of-the-theme>" Save the file. Restart the Ghostty terminal to see the theme effect. Quotes are needed for themes that have spaces in their names. An example: theme = "Apple Classic"Let's see it in action where I change the Ghostty theme to Apple Classic. 0:00 /0:21 1× 💡You can also set light and dark theme choices so that it changes with your system theme: theme = dark:ayu,light:ayu_lightWhat about external themes?Didn't spot the theme of your choice in Ghostty built-in? You can download a color scheme of your choice or create one from scratch! The condition is that the theme files should be present in the ~/.config/ghostty/themes directory. Once the theme file is placed in its location, open the Ghostty config file and add the line in the same manner: theme = "<theme-file-name>" 🚧Avoid using external theme configs file blindly. Because, themes can modify any Ghostty options.Restoring the default themeDon't like the theme you changed to and want to go back to the original default theme instead of trying random themes until you find a suitable one? All you have to do is to revert the changes you made earlier. How do you do that? Just remove the theme = theme-name from the ~/.config/ghostty/config file. Or, just comment it out by adding # in front of that line. Cool Ghostty ThemesNow that you are familiar with the basics, let's see some cool Ghostty themes I like and perhaps you can give them a try. 1. Monokai ClassicMonokai Classic is a visually pleasing color scheme that is pretty popular among developers. If you like colored terminals with syntax highlighting and fun Linux tools such as eza, Monokai Classic is a must-checkout theme. Monokai ClassicTheme code: theme = "Monokai Classic" 2. Monokai ProYes, when it comes to standout colors, Monokai variants just excel. No wonder developers often use these themes frequently. Monokai Pro is an enhanced version of the classic Monokai theme with refined colors and improved contrast for professional development work. Monokai ProTheme code: theme = "Monokai Pro" 3. ayuA minimalist dark theme with subtle red and blue accents, designed for extended coding sessions with reduced eye strain. If you use prompts like Starship or tools like Ohmyzsh, this theme does a pretty good job with the colors. ayuTheme code: theme = ayu 4. GitHub Dark DefaultFor those who use GitHub so often and love the default color schemes used in GitHub, this is a nice choice to consider. The scheme focuses on better contrast, and the dark mode blends pretty neatly with the rest of the colors. GitHub Dark DefaultTheme code: theme = GitHub-Dark-Default 5. Catppuccin MochaWho doesn't love the Catppuccin themes? What makes Catppuccin special is its consistency across development tools; you can theme your entire workflow with matching colors, creating a cohesive and calming development environment. In Ghostty, you can install this theme with just one line in your config. If you are using Starship, go for the Catppuccin Mocha preset. Catppuccin MochaTheme code: theme = catppuccin-mocha 6. DesertDesert is not a super dark theme; it is more like a warm dark theme with a matching color palette. You still get pretty neat contrast colors for better syntax highlighting and readability. The Starship Gruvbox prompt theme is a perfect prompt match for this theme. DesertTheme code: theme = Desert 7. NordfoxNord theme has a special fan following! Like Catppuccin, the Nord color scheme also has a wide presence across many tools. So, if you are one looking to build a unique work environment, Nordfox is an interesting choice. NordfoxTheme code: theme = nordfox 8. Adwaita DarkIf you are a GNOME user, this can be the best theme to choose for a cohesive desktop experience. Given you like Vanilla GNOME, this theme will match your system perfectly and look consistent across all your applications. Adwaita DarkTheme code: theme = "Adwaita Dark" 9. SynthwaveA fun, dark theme with some bright neon color palettes. It's perfect if you want your terminal to look cool while coding games or creative projects. SynthwaveTheme code: theme = synthwave 10. Ayu LightThe light version of the ayu theme. It has clean whites and soft colors that work well in bright rooms or during daytime coding. ayu_lightTheme code: theme = ayu_light 11. PrimaryA simple, clean light theme focused on clarity. It's great for reading documentation or any work where you need crystal-clear text. It is challenging to create a perfectly read-friendly light theme, and Primary has done a fantastic job with the color choices. primaryTheme code: theme = primary 12. Tinacious Design LightThis is some creative color choice to select. Especially the blue ones, which, if not chosen correctly, can easily make text unreadable in a white background. But this theme has all done well with the colors. It should be one of the choices for bright theme lovers! Tinacious Design (Light)Theme code: theme = "Tinacious Design (Light)" 13. Catppuccin LatteLight or dark, Catppuccin is unavoidable. Latte is the only light theme variant from Catppuccin, and to me, this appears to have more identifiable colors than the dark one. Each color is perfectly visible in all cases. I suggest you use the Catppuccin starship preset theme along with this for a proper terminal experience. Catppuccin LatteTheme code: theme = catppuccin-latte 14. One Half LightA balanced light theme that's bright but not harsh. The colors are chosen carefully so you can read for long periods without eye strain. OneHalfLightTheme code: theme = OneHalfLight Wrapping UpGhostty provides plenty of built-in themes, as you can see from the first section. You can set any theme, even a custom-designed one. Most of the themes provided by Ghostty are beautiful-looking, and if you scroll through them one at a time, you can find some eccentric color choices as well! If you are a Kitty user, you may recall the kitten themes command to get a similar interactive theme selector. But, in Kitty, you can easily press enter on a theme to modify the config and apply the theme. That handy feature is absent here, unfortunately. I let you experiment with Ghostty themes and if you are interested, you can also explore some beautiful themes for VS Code 😸
-
Speed Isn't Everything When Buying SSDs - Here's What Really Matters!
by: Sourav Rudra Sun, 07 Sep 2025 05:33:35 GMT A few months ago, I learned this the hard way: never rely on a cheap DRAM-less SATA SSD in a heavily used system, especially one handling constant OS updates and virtual machines. Despite having an NVMe drive in my rig, I overestimated the durability of that cheap SATA SSD and ended up with a broken system and no operating system. That crash confirmed what I already suspected. Specs beyond speed truly matter. Endurance, DRAM cache, thermal management, and build quality can make or break an SSD, especially under sustained heavy use. After digging into what went wrong (the SSD literally burned out), I realized that choosing the right SSD isn’t just about chasing the highest speeds for your budget; it’s about balancing performance, reliability, and real-world durability. It's All About Endurance and DurabilityEvery SSD has a limited number of write cycles. Once cells hit that limit, they can no longer store data reliably. Manufacturers usually list this in terabytes written (TBW) or drive writes per day (DWPD).this For most 1TB consumer drives, endurance ratings in the 300–600TBW range are typical, which is plenty for years of gaming, office work, or casual use. But in heavier scenarios, like virtual machines, large project files, or constant OS updates, endurance can become a real limiting factor. Bigger drives generally last longer because the workload is spread across more cells. That’s why a 2TB model of the same SSD often has a much higher TBW than its 1TB sibling. But endurance isn’t only about raw numbers. Heat is the silent killer. High-performance drives can overheat, especially if they’re packed into a laptop or cramped case without adequate cooling. Overheating accelerates wear and can shorten SSD lifespan. Another thing to look out for is over-provisioning, where the drive reserves a portion of its storage as backup. As cells fail, the controller quietly swaps your data to fresh cells, extending the drive's usable life. You never see this process happening, but it’s one reason SSDs can keep running reliably for years before they finally wear out. ✅ Action to takeCheck the TBW and DWPD in the technical specifications of the SSD model you are considering. If it is not available on Amazon or other shopping pages, the official product website should have it mentioned somewhere. For example, Samsung EVO lists the endurance details on its product page. Build Quality and Physical Features MatterSSDs resist physical shock and vibration better than traditional drives due to having no moving parts. This durability advantage makes them ideal for laptops, portable workstations, and any system that might experience movement or impacts during operation. Construction quality varies significantly between manufacturers and price points. Premium drives feature better controllers, higher-grade NAND flash memory, and more robust physical designs. These differences become apparent during extended use and under demanding workloads. ✅ Action to takeUnless money is really an issue and you are not looking for durability, you should avoid getting SSDs from cheap, lesser-known brands. A quick Amazon review lookup will tell you the story, as people often regret buying low-quality SSDs. Power Efficiency is ImportantFor laptop and tablet owners, drive efficiency is more important than speed if they want to save battery life. Choosing an extremely efficient drive can gain you significantly more unplugged run time compared to faster but power-hungry alternatives. Higher-capacity models can draw more power than smaller drives. Desktop users chasing maximum performance typically don't worry about power consumption. However, power efficiency still matters for electricity costs and heat generation in compact systems or large-scale deployments (e.g., in server farms). Typical NVMe drives typically consume 2–15 watts (or more) during active use, while SATA SSDs often use even less power. The difference between the two is that NVMe drives generally offer much higher performance in a tiny package, especially in sequential and random read/write tasks, but this comes at the cost of higher power consumption and more heat generation. SATA drives, while slower, are more power-efficient and produce less heat, making them ideal for laptops or compact deployments where efficiency matters more than peak speed. ✅ Action to takeThink about where you are going to use the SSD. Since the price gap between a SATA SSD and an NVMe SSD has reduced greatly, it is tempting to always go for NVMe. However, SATA SSDs could still be a better choice, specially when you are considering a homelab where the system keeps on running 24x7. For data storage that is not accessed as often, SATA SSDs could help you reduce your electricity bill a tiny little bit. Controller Quality Determines LifespanThe controller is the brains of the SSD, a specialized processor that directs how and where data is written, handles wear-leveling, and performs error correction. Its quality has a huge impact on both performance and durability. A strong controller ensures the drive runs smoothly under stress, while a weaker one may stutter or degrade faster over time. Brands like Samsung, SK Hynix, Intel, and WD design their own controllers for flagship drives. Others, like Phison and Marvell, supply controllers that power a wide range of third-party SSDs. There’s nothing wrong with third-party controllers, but not all of them perform equally. The difference usually shows up in sustained workloads, where two drives might look identical in sequential speed tests, but one maintains performance over time while the other falls off a cliff. ✅ Action to takeUnless you want to dive deep into the world of SSD tech, you don’t need to memorize controller names. Instead, pay attention to reviews and long-term benchmarks. They’ll tell you whether a drive has a reliable, consistent controller or if it struggles under heavier workloads. NAND Flash Type and DRAM Cache Can Make It or Break ItNot all NAND is created equal. The type of flash inside your SSD shapes how fast it feels, how much it costs, and how long it lasts: TLC (triple-level cell): The best balance for consumers. Fast, durable, and widely used.QLC (quad-level cell): Cheaper and denser, but slower and less reliable long term. Fine for light use or secondary storage.SLC/MLC: Older but higher-end types, storing fewer bits per cell, which makes them faster and tougher. Mostly reserved for enterprise use cases these days.Another major factor is DRAM cache. SSDs with DRAM include a small chunk of fast memory that helps them track and organize data efficiently. This matters most for heavy multitasking or big file transfers. DRAM-less drives, on the other hand, save money and rely on your system’s memory instead, which works fine for light workloads but can choke under heavier demands, exactly what happened in my case. ✅ Action to takeIf the price difference isn’t huge, opting for a DRAM-equipped SSD is usually the smarter move. It’s a small feature that pays big dividends in stability, responsiveness, and longevity. Check the technical specs of the SSDs you have shortlisted and see if they have DRAM. Don't Forget Random Read/Write PerformanceFinally, don’t get caught up only in sequential speed numbers. Those flashy "7,000 MB/s" claims look impressive, but they mostly apply to big, straight-line transfers, not everyday use. What really shapes your experience is random performance, or how fast the drive can fetch small chunks of data scattered across the memory. This is where specs like random IOPS (input/output operations per second) come in. A drive with higher random read/write performance feels snappier when booting an OS, launching games, or juggling apps. High-end models like Samsung’s 990 Pro boast over a million IOPS, while mid-tier drives like WD’s SN770 hover around 700–800K. ✅ Action to takeThese numbers aren’t always listed on product pages, but reviews highlight them. If you’re not moving giant files every day, this is the number to care about. It’s what makes your system feel fast in real-world use, even if the sequential speeds are lower than the competition. Research mattersI always feel that it is good to research before making a purchase, especially a technical purchase. It is the sign of an informed, smart consumer. Not only does it help you save money and get the better product, but it also teaches you new things and helps increase your knowledge. I hope you learned a few new things here that will help you make a better decision while purchasing your next SSD. Please let me know in the comments what new stuff you learned here. And if you want to contest any technical points, politely express your view in the comment section.
-
What You Need to Know About CSS Color Interpolation
by: Sunkanmi Fafowora Fri, 05 Sep 2025 13:44:06 +0000 Color interpolation, loosely speaking, is the process of determining the colors between two color points. It allows us to create unique colors, beautiful palettes, better gradients, and smooth transitions. I recently wrote a Guide to CSS Color Functions but didn’t have the chance to explain color interpolation in any great depth — which is a shame, since it allows us to create cool demos like this one: CodePen Embed Fallback Did you notice how oklch(80% 0.3 340) interpolates to oklch(80% 0.3 60), then to oklch(80% 0.3 180), then to oklch(80% 0.3 270) and back to oklch(80% 0.3 340) using CSS animation? Well, I did! And that’s just a powerful use of interpolation. Where can we use color interpolation? Again, color interpolation is all over CSS. These properties and functions support color interpolation either through direct mixing, gradients, or transitions: All color gradients, likelinear-gradient(), conic-gradient(), etc.) color-mix() animation transition filter All functions in the relative color syntax In gradients and the color-mix() function, we even have a formal syntax for color interpolation: <color-interpolation-method> = in [ <rectangular-color-space> | <polar-color-space> <hue-interpolation-method>? ] <color-space> = <rectangular-color-space> | <polar-color-space> <rectangular-color-space> = srgb | srgb-linear | display-p3 | a98-rgb | prophoto-rgb | rec2020 | lab | oklab | xyz | xyz-d50 | xyz-d65 <polar-color-space> = hsl | hwb | lch | oklch <hue-interpolation-method> = [ shorter | longer | increasing | decreasing ] hue Yes, that’s a convoluted definition, but if we go ahead and inspect how this syntax works in color-mix(), for example, we would have something like this: .element{ color: color-mix(in lch longer hue, red, blue); } The CSS color-mix() function provides a way for us to mix different colors in any color space, which is all what color interpolation is about: going from color to another. Our key focus is the in lab longer hue part, which specifies how color-mix() does the interpolation. This is basically saying, “Hey CSS, interpolate the next colors in the CIELCH color space using a longer hue arc.” Yes, the in lab part means the interpolation is done in CIELCH, one of the many CSS color spaces, but we’ll get to what longer hue exactly means later. Just remember: The in keyword always precedes the color interpolation method. The second value is the color space used for mixing. The third value is an optional hue interpolation method ending with the hue keyword. This same syntax appears in all gradient functions, where colors are interpolated gradually to get a smooth gradient. Look at how tweaking the gradient with the color interpolation syntax can give us a completely new gradient: .element { background: linear-gradient(in oklch longer hue 90deg, magenta, cyan); } CodePen Embed Fallback Let’s backtrack a little, though. Interpolation can occur in two major color spaces: rectangular and polar. Rectangular color spaces Rectangular color spaces represent colors using Cartesian coordinates on a three-dimensional plane, which you might already know as the X (horizontal), Y (vertical), and Z (depth) axes on a graph. Rectangular color spaces are like the same sort of graph, but is a map of color points instead. For example, the sRGB color space has three axes, responsible for the amount of a color’s redness, blueness, and greenness. Polar color spaces Polar color spaces also represent colors in a three-dimensional plane, just like rectangular color spaces, but it is shaped like a cylinder instead of a rectangular. A color point is represented by three values: The height from the point to the center, usually assigned to lightness or brightness. The radial distance from the center, usually assigned to chroma or saturation. The angle around the center, assigned to the hue. Credit: Wikipedia What makes polar color spaces unique is the hue angle. Since it’s an angle, and they are cyclic (like a continuous circle), we have more options for how it can be interpolated. Hue interpolation Think of hue interpolation like finding the distance between the two times on a clock. Let’s assume the clock can go clockwise (forwards) or counterclockwise (backwards) in time. The minute hand is at 10 minutes (2). If we want to take the shortest distance between 50 minutes (10), then we would make a counterclockwise turn, like going back in time since that is shorter than moving forward in a clockwise direction. That’s because if you take the longer route, you’ll have to pass through 3, 4, 5, etc. all the way to 10. Taking the shorter counterclockwise) route , you would reach 10 in less time (15 minutes). Hue interpolation works similarly. It is a CSS algorithm that determines how you want hue colors in polar color spaces to be mixed, and the direction you want to take between two hue points. There are four types of hue interpolation in CSS. Let’s go over those next. shorter and longer The shorter (default value) hue interpolation method simply takes the shorter route, while the longer hue interpolation method takes the longer route when mixing colors between two hue points. Imagine blending two hue values red (0deg) and blue (240deg). There are two ways to do this: Go the longer route (distance of 240deg). Go the shorter route (distance of 120deg). If shorter is used, the browser takes the shorter route (120deg). Otherwise, if longer is used, the browser takes the longer route (240deg). CodePen Embed Fallback This offers up a nice and unique blend of colors depending on your preferences. Hue interpolation is useful in creating smooth color transitions and gradients, giving plenty of life to the websites using color. The shorter or longer hue interpolation, depending on the shortest or longest distances between two hue value points, can either go clockwise or counterclockwise. We can also set this automatically without actually using one of these keywords, which we will look at next. increasing and decreasing Sticking with our clock analogy, the increasing hue interpolation method is like moving the minutes hand from 2 to 10, always in a clockwise direction. Even if the final value is 1, it would still go in a clockwise direction, doing almost a full turn. If, however, the hue interpolation method is set to decreasing, the minutes hand will always go in a counterclockwise direction. As the specification says, “[d]epending on the difference between the two angles, this will either look the same as shorter or as longer.” If the angle goes from 20deg to 50deg using the increasing hue interpolation value, the value will move clockwise from 20deg to 50deg, displaying the colors in between. However, if the hue interpolation method is set to decreasing, then the algorithm takes the value from 20deg to 50deg in a counterclockwise direction. Since increasing means the clock’s minute hand is constantly moving forward, this means the value can reach up to 360deg, a full circle. If the angle reaches 360deg, it resets back to 0deg until it reaches the next point. But if decreasing reaches 0deg, then it resets to 360deg, keeping the hue change consistent. CodePen Embed Fallback How is this useful? Yes, all this theory is great: we can use interpolation to get the intermediary color(s) between two colors and make new kinds of colors, but how can we actually use it to create better color experiences in CSS? Creating gradients Color interpolation happens frequently in all CSS gradient functions. Take, for example, the conic-gradient() function, which makes it easy to create a smooth transition of colors that rotate around a center point: background: conic-gradient( from 0deg, oklch(70% 0.3 0deg), oklch(70% 0.3 120deg), oklch(70% 0.3 240deg), oklch(70% 0.3 360deg) ); CodePen Embed Fallback Notice how the hue blends smoothly between each color stop point? It’s beautiful. Color mixing Reading about color-mix() in the CSS-Tricks Almanac will give you a basic idea of how this is done, but if you’re like me and want the raw code, here it is: /* First Box */ background-color: color-mix(in oklch, rgb(255 0 0) 50%, lch(60% 40% 220deg) 50%); /* Second Box */ background-color: color-mix(in oklch longer hue, rgb(255 0 0) 50%, lch(60% 40% 220deg) 50%); CodePen Embed Fallback A great advantage of color-mix() is that you gain the ability to mix colors in different color spaces within another color space, thereby producing a unique color. Again, it’s moving from one color into another and the direction we take for mixing colors matters. Animation We can animate the transition between colors! So, instead of mixing two specific points, we can watch the color transition between all of the colors in between the two points! @keyframes bg-shift { from { background-color: oklch(30% 0.3 20deg); /* dark pink */ } to { background-color: oklch(70% 0.3 200deg); /* Cool bluish */ } } CodePen Embed Fallback References Okay, Color Spaces by Eric Portis ColorAide Color Interpolation Documentation CSS Color Module Level 4 Interpolating Colors by Chris Brunell What You Need to Know About CSS Color Interpolation originally published on CSS-Tricks, which is part of the DigitalOcean family. You should get the newsletter.
-
LHB Linux Digest #25.25: tmux, ripgrep, Intro to Linux Command Line, Redis Alternative and More
by: Abhishek Prakash Fri, 05 Sep 2025 17:09:17 +0530 I presume that you are already familiar with the Linux command line. If not, or if you know someone interested in learning it, do share our introductory Linux Command Line Course. Our free course introduces the Linux command line in an hour. It builds a foundation for further Linux learning. Quick Introduction to Linux Command LineLearn the basics of Linux commands in this short introductory course. Also contains videos.Linux HandbookTed LeRoySpread the knowledge of Linux 🐧 This post is for subscribers only Subscribe now Already have an account? Sign in
-
FOSS Weekly #25.36: Ubuntu 25.10 Features, Top Command, Firefox Survives, Sudo Tips and More
by: Abhishek Prakash Thu, 04 Sep 2025 04:47:46 GMT Ubuntu 25.10 is nearly a month away. A new default terminal and rust-based sudo are among the prominent new features in this upcoming release. Ubuntu 25.10: Release Date and New Features in Questing QuokkaTake a look at the new features and changes you’ll see in the upcoming Ubuntu 25.10 release.It's FOSS NewsSourav RudraWhat intrigues me is that the new default terminal is already in use on Fedora 42. Another interesting development this week is Vivaldi's denial to include AI features in its browser. When AI is being pushed everywhere, it is interesting to see Vivaldi opposing it, at least for now. 💬 Let's see what else you get in this edition New launches by Proton and Tuta.Microsoft donating its open source project.An interview with Linux Foundation India's head.And other Linux news, tips, and, of course, memes!📰 Linux and Open Source NewsAerynOS's August 2025 update packs in many changes.Tuta adds key verification to further bolster its email service.Microsoft has donated DocumentDB to the Linux Foundation.Proton has launched a way to provide emergency access to accounts.Vivaldi says no to AI, focusing on active browsing over passive consumption.🧠 What We’re Thinking AboutIt looks like Mozilla's main revenue stream is safe from the axe. Mozilla’s Lifeline is Safe After Judge’s Google Antitrust RulingMozilla can continue receiving Google payments under new antitrust ruling.It's FOSS NewsSourav RudraWe recently had a nice chat with Arpit Joshipura, the head of Linux Foundation India. From Consumer to Contributor: How Linux Foundation India is Shaping the Future of Open SourceLinux Foundation India head talks growth, projects, and developer communities.It's FOSS NewsAbhishek🧮 Linux Tips, Tutorials, and LearningsInstalling Fedora doesn't have to be complicated.Give your VS Code a glow-up with these 19 gorgeous themes.Here are 7 Sudo tips and tweaks that will surely enhance your experience.Check out these distros that help you get the retro gaming console feel. Linux Distros That Turn Your PC into Retro Gaming ConsoleLooking to spice up your system as a retro gaming console? These Linux distributions can help you do that.It's FOSSAbhishek Prakash👷 AI, Homelab and Hardware CornerUnleash a mini VM lab on your Pi with Proxmox. Installing Proxmox on a Raspberry Pi to run Virtual Machines on itThough Proxmox is not officially available for Raspberry Pi yet, you can surely be experimental and install it on your Pi like I did.It's FOSSAbhishek KumarIn the rapidly growing list of 'gadgets I wish to own', I have added this teeny tiny TV. It's an actual TV-like device that can play videos on the SD card and can be operated by remote or through the knob to give you the 80s feel. Note that it cannot play actual TV channels. An interesting gadget that can be used in miniature designs or put on display on your desk or shelf. TinyTV® 2 with Tiny RemoteDESCRIPTION The TinyTV® 2 is the cutest way to watch your favorite videos and full-length movies. It is fully assembled, comes preloaded with videos, and works right out of the box. Adjust the volume and surf between channels by turning the knobs on the TinyTV 2 or by using the included Tiny Remote control. The TinyTV®TinyCircuitsTinyCircuitsIt's not expensive for people living in the US, but for me it will cost a lot in international shipping and custom duty and hence it goes on my wishlist. Explore Tiny TV 2 on its official website✨ Project HighlightPogocache has set out to beat the likes of Redis, Valkey, etc. in their game. Pogocache: High-Performance, Multi-Protocol Redis AlternativeRedis, who? Pogocache offers speed, simplicity, and flexibility for modern caching needs.It's FOSS NewsSourav Rudra📽️ Videos I am Creating for YouExplore some of the lesser-known options of the Top command, the OG system monitoring tool of Linux systems. Subscribe to It's FOSS YouTube Channel🧩 Quiz TimeCan you guess these legendary open source projects? Guess the Legendary Open Source Projects: CrosswordTime to exercise those grey cells and correctly guess these legendary open source projects that have hugely impacted the tech world we live in.It's FOSSAbhishek Prakash Why should you opt for It's FOSS Plus membership: ✅ Ad-free reading experience ✅ Badges in the comment section and forum ✅ Supporting creation of educational Linux materials ✅ Free Linux eBook Join It's FOSS Plus 💡 Quick Handy TipIn Nautilus file manager, go into the "Preferences" menu via Ctrl + , and scroll down to the bottom. Here, in the "Grid View Captions" section, set the option called "First" to the parameter "Detailed Type". Now, when you are in the "Grid View" (accesible via the toggle near the address bar), you will get detailed information on each file's filetype/format, like PNG, Python 3 script, Shell script, HTML, etc. 🤣 Meme of the WeekOh Neofetch, why did you have to go? 🥹 🗓️ Tech TriviaOn September 1, 1994, the Library of Congress held its first planning meeting for a "virtual library". The project, which evolved into the National Digital Library Program, aimed to digitize fragile and rare items so they could be preserved and accessed online. Today, the Library’s digital collections make millions of items available worldwide. 🧑🤝🧑 FOSSverse CornerOne of our regular FOSSers and moderators of our forum is looking for some accounting software recommendations. Can you help? Accounting software recommendations?Our association Trésorier wants to replace his software as its old (plus 10 years) and no longer available or supported company no longer exists. He cannot remember the name….. As its a computer problem, they turn to me to recommend a tool. I know nothing about accounts, its got to be 30 years since I used pegasus or sage and even then I was no expert just covered the minimum As we are an association and want the lowest price possible (free) but still with functions to balance our books I sug…It's FOSS Communitycallpaul.eu (Paul)❤️ With lovePlease share it with your Linux-using friends and encourage them to subscribe (hint: it's here). Share the articles in Linux Subreddits and community forums. Follow us on Google News and stay updated in your News feed. Opt for It's FOSS Plus membership and support us 🙏 Enjoy FOSS 😄
-
Should the CSS light-dark() Function Support More Than Light and Dark Values?
by: Sunkanmi Fafowora Tue, 02 Sep 2025 14:44:26 +0000 One of the newer CSS features that has piqued my interest: the light-dark() function. And I’ve been closely following it ever since it became Baseline back in May 2024. The light-dark() function, briefly If you don’t know, the light-dark() function takes two color arguments: one for light mode and one for dark mode. Hence, the name light-dark(). It toggles between the two light and dark values based on a user’s preferences. Sara Joy has a wonderful article where you can get a much more detailed explanation. The key thing is that the function requires you to use the color-scheme property to activate those two color modes: :root { color-scheme: light dark; } .element { color: light-dark(brown, black); } And, depending on the user’s preference, one of those two modes is applied. Just two modes? That said, I’ve been wondering for a while now: Should the light-dark() function support more than light and dark color modes? I wrote about light-dark() for the CSS-Tricks Almanac. During my research, I found myself wishing the function could do more, specifically that it lacks support for other types of color schemes that a user might prefer, such as grayscale, high contrast, and low contrast. Does light-dark() even need a high-contrast mode? I’d say both yes and no. Let’s go back in time to when light-dark() was initially proposed somewhere around 2022. Emilio Cobos asked for a function to support light and dark mode changes, and it was added to the specifications. Done and handled, right? Not so fast. The ticket was indeed closed when Jacob Miller chimed in: Good thing he chimed in, because that prompted Bramus to reopen the ticket: That’s a big deal! Bramus is saying that the light-dark() function is an intermediary solution on the way to a schemed-value() function. In other words, shipping light-dark() was never the intended end goal. It’s a step along the way to this other more robust schemed-value() feature. Custom color schemes Bramus has already written a bunch about the schemed-value() concept. It could look something like this: :root { color-scheme: dark light custom; } body { color: schemed-value( light lightblue, /* Value used for light color-scheme */ dark crimson, /* Value used for dark color-scheme */ --custom green /* Value used for --custom color-scheme */ ); } This isn’t possible with light-dark(). In fact, before the function can support more than two modes, the color-scheme property has to be extended with more than the light and dark values. Only then can light-dark() be extended because, remember, light-dark() needs the color-scheme property in order to do its thing. Specifically, we’d need color-scheme to accept some sort of “custom” color scheme value. Tab Atkins provides a possible example in the ticket. The idea is to register a custom color scheme using a @color-scheme at-rule that defines the scheme’s properties, such as what particular color keywords are mapped to, and then use that color scheme’s ident on the color-scheme property that is declared on the root element: @color-scheme --high-contast { base-scheme: dark; canvascolor: black; canvastext: white; accentcolor: white; /* other properties set to specific colors */ } html { color-scheme: --high-contrast; } With that in place, the custom color scheme can be used as its own standalone value in the forthcoming schemed-value() function: @color-scheme --high-contast { /* ... */ } html { color-scheme: --high-contrast light dark; } body { color: schemed-value(--high-contrast, black, white); } Breaking it all down: We register a custom color scheme (e.g. --high-contrast) in a @color-scheme at-rule. We define the color scheme’s properties in the at-rule, such as whether its base theme is light or dark and what certain values color keywords map to. We declare the custom color scheme on the color-scheme property at the root level (i.e., html { color-scheme: --high-contrast;}). We apply the custom color scheme by declaring it on color-related properties by way of the schemed-value() function. So, not only will light-dark() change, the CSS color-scheme property will most likely have its own at-rule to allow for custom color-scheme values. We need more color theme support, but not in light-dark() This begs my earlier question: Does the light-dark() function really need to support more than two color scheme modes? Bramus has an answer: A-ha! This means light-dark() doesn’t need to support multiple modes because schemed-value() has the power to extend light-dark() by its own virtue: light-dark(<color>, <color>); = schemed-value(light <color>, dark <color>); Is light-dark() an intermediary step? Yes, it is. And should it be extended to support multiple modes, including custom color schemes? It certainly could, but it doesn’t have to be. Instead, we can register and define a custom color scheme in an at-rule and make sure the color-scheme property can read it. That way, we get the simplicity of a two-mode function that can be further abstracted to support additional custom modes, if needed. In fact, it goes beyond color schemes. There is even an open ticket to extend light-dark() for images, and the discussions surrounding it seem to agree on a new function specifically designed for it. What about custom functions? But, wait! Doesn’t a lot of this sound a lot like what we’ve been hearing about the work happening with custom functions? Indeed, Tab came back with a possible approach using the if() function, and the Chris Lilley retagged the ticket as a result. That’s when Bramus demonstrated how we could reasonably replicate the light-dark() function with a custom CSS function: :root { /* ensures light mode comes first */ --scheme: light; /* dark mode is set here */ @media (prefers-color-scheme: dark) { --scheme: dark; } } /* custom function returns any two values depending on whether system is in light or dark mode */ @function --light-dark(--light-color, --dark-color) { result: if(style(--scheme: dark): var(--dark-color) ; else: var(--light-color)); } p { font-size: --light-dark( 2rem, 2.5rem ); /* returns 2rem if system is in light mode and 2.5rem if system is in dark mode */ } Nothing is set in stone! The only thing we know for sure is that we have a working light-dark() function and it’s Baseline widely available for use. Custom functions a work in progress and only available in Chromium-based browsers at the time I’m writing this. The path forward I’ve been exploring everything color-related for a while now, and I’d like to know your thoughts: Are you excited about the upcoming changes to light-dark()? Do you think light-dark() should support more color modes like high contrast? Let me know your thoughts in the comment section below. Feel free to also comment on any of the W3C GitHub comment threads linked in this post to share your thoughts and concerns for the coming new features. More on light-dark() Almanac on Jul 8, 2025 light-dark() html { color: light-dark(#000, #fff); } accessibility color Sunkanmi Fafowora Article on Oct 29, 2024 Come to the light-dark() Side dark mode functions UI/IX Design Sara Joy Article on Jun 5, 2025 Exploring the CSS contrast-color() Function… a Second Time accessibility color CSS functions Daniel Schwarz Article on Jun 26, 2025 Poking at the CSS if() Function a Little More: Conditional Color Theming CSS functions Daniel Schwarz Should the CSS light-dark() Function Support More Than Light and Dark Values? originally published on CSS-Tricks, which is part of the DigitalOcean family. You should get the newsletter.
-
407: Our Own CDN
by: Chris Coyier Tue, 02 Sep 2025 14:32:51 +0000 Robert and Chris jump on to talk about own own little CDN project. Maybe that’s not the right term, but we struggled with naming it. Truth be told, it’s the /public/ folder in our monorepo, where the purpose is getting files to the world wide internet at URLs that anyone can access. Our favicon is a good example, where many of our sites need access to that, but we only want it once in our repo (but we have actually lots of use-cases.) There are several complications along the way. One is that we need to fingerprint these files so we can cache-bust them when needed. We also need to be able to import the URLs in other parts of the repo, so we need manifest files that contain those URLs in multiple formats. Plus many of the files have their own build process, they aren’t just entirely static files. In the end, building our own thing was probably the right move. The files go to Cloudflare R2, which, I suppose, is the CDN part. Time Jumps 00:40 Introducing Robert 01:02 Our public CDN 04:25 How we might make the first version of this 09:58 How we link to fonts on the web 14:01 What is the correct way to implement this? 17:19 Accounting for different dev environments 22:29 How do we run deployment? 31:06 Why did we make our own build tool? 40:27 Taking in environment variables
-
407: Our Own CDN
by: Chris Coyier Tue, 02 Sep 2025 14:32:51 +0000 Robert and Chris jump on to talk about our little CDN project. Maybe that’s not the right term, but we struggled with naming it. Truth be told, it’s the /public/ folder in our monorepo, where the purpose is getting files to the world wide internet at URLs that anyone can access. Our favicon is a good example, where many of our sites need access to that, but we only want it once in our repo (but we have actually lots of use-cases.) There are several complications along the way. One is that we need to fingerprint these files so we can cache-bust them when needed. We also need to be able to import the URLs in other parts of the repo, so we need manifest files that contain those URLs in multiple formats. Plus many of the files have their own build process, they aren’t just entirely static files. In the end, building our own thing was probably the right move. The files go to Cloudflare R2, which, I suppose, is the CDN part. Time Jumps 00:40 Introducing Robert 01:02 Our public CDN 04:25 How we might make the first version of this 09:58 How we link to fonts on the web 14:01 What is the correct way to implement this? 17:19 Accounting for different dev environments 22:29 How do we run deployment? 31:06 Why did we make our own build tool? 40:27 Taking in environment variables
-
Chris’ Corner: Clever Clever
by: Chris Coyier Mon, 01 Sep 2025 17:29:09 +0000 David Darnes made a <code-pen> web component, which is a basic HTML/CSS/JS panel layout that renders them into an iframe (using the very cool <syntax-highlight> web component as well). Then it ate itself when Ariel Salminen put a <code-pen> in a <code-pen>. Then the universe collapsed upon itself when Rob Rhoades made a code pen linking to a code pen inside a <code-pen> inside a CodePen. The kids are alright. Speaking of, uhhhh, eating oneself, Julia Miocene has a video of a Recursive square that is a very satisfying watch. I almost forgot what was happening up until the end when you’re like ohhhhhhhh right it’s a perfect loop. Clever clever. There is a thing you need to do once in a while where the more text you have, the smaller you want the font-size to be (and vice-versa). I remember doing this ages ago on a quotes site where I wanted very short quotes in big text and very long quotes in small text. I counted the letters in PHP and applied a font size based on ranges. It wasn’t pretty. Dave blogged that (as long as you have the character count as an HTML attribute) you can do this in CSS (in supporting browsers). You set an “ideal” number of characters per line, then do a little division to get a ratio, and apply the ratio to the font-size (while setting a clamp-ed minimum and maximum). Clever clever. I liked the Zach’s clever thinking in his Eleventy Image project where, when display an image that starts as SVG, it converts them to a raster format (like PNG or JPG) only when the converted image is actually smaller. Like it’s smart enough to pick which choice to make depending on file size. Or maybe I just like the name: SVG Short Circuiting. Cassidy blogged a little while back a fairly succinct way of figuring out an element’s “index” when you need it. That is, say a <div> contains three <button> elements, and you click the second one. How do you know it’s the second one? Go up the parent, get an array of the children, and check the indexOf of the button. (Clever, clever.) I actually think it’s more interesting that we’ll have this information in CSS soon with sibling-index() and friend (sibling-count()). The pseudonymous dade blogged an idea that I’m pretty surprised I’d never seen before now, as it feels like an old school progressive enhancement technique. If you need to hide a feature on the page that you know only works with JavaScript, you can put a <style> in a <noscript> to do it. <noscript> <style> .thing-that-only-works-with-js { display: none; } </style> </noscript> Clever, clever.
-
Installing Proxmox on a Raspberry Pi to run Virtual Machines on it
by: Abhishek Kumar Mon, 01 Sep 2025 05:32:41 GMT The other day, a friend and I were talking about virtualization, spinning up virtual machines (VMs), containerization, and all that fun tech stuff. He casually said, “You know, even a Raspberry Pi can run a VM these days.” I laughed, thinking he was joking. A Raspberry Pi? Running a virtual machine? Come on. But he wasn’t kidding. Later that week, I stumbled across a discussion about Proxmox and how it supports ARM-based devices like the Raspberry Pi (not officially 😉). I’m a naturally curious person, and once I read that Proxmox now can be installed on an ARM device, I couldn’t resist. I grabbed my Raspberry Pi 5, rolled up my sleeves, and decided to give it a shot. If you’ve never heard of Proxmox, let me introduce you. What is Proxmox, again?In case you didn't know, Proxmox Virtual Environment (VE) is a powerful, open-source platform designed for virtualization. It allows you to manage virtual machines and containers through an intuitive web interface. Think of it as the command center for running multiple operating systems on a single device, with added features like software-defined storage, network configuration, and clustering. However, before you get too excited, let’s be real: the Pi is a capable little workhorse, but it’s no match for high-performance processors or dedicated server hardware. It has its limits, and while it’s fun to tinker with, expecting it to handle heavy virtual machine workloads is asking too much. That said, for lightweight tasks and experimentation, it’s more than up for the challenge! Now, let me take you through the steps I followed to get Proxmox up and running on my Raspberry Pi. What you'll need to install Proxmox on Raspberry PiHere’s your checklist: Raspberry Pi 4 or 5 (8GB RAM recommended)MicroSD card (class 10 or better for faster read/write speeds)64-bit Raspberry Pi OS Lite (Bookworm)Power supply and Ethernet cable (or Wi-Fi, but wired is preferred)Step 1: Start with a clean slateFirst things first, make sure you’re using a fresh installation of Raspberry Pi OS Lite (64-bit, Bookworm). During my testing, I found that using an older or cluttered setup led to unexpected errors, especially when dealing with package dependencies. A clean OS makes everything smoother. If you haven’t done so already, download the Bookworm image from the Raspberry Pi website and flash it onto your SD card using a tool like Raspberry Pi Imager. Step 2: Update and upgrade your PiOnce your Raspberry Pi is booted and connected, log in via SSH or directly on the terminal. Run these commands to update your system: sudo apt update && sudo apt upgrade -yThis step ensures your Pi is up to date with the latest security patches and fixes. We’ll use curl to grab the GPG key for the Proxmox repository later, so let’s ensure it’s installed. If it’s missing, you can install it with this command: sudo apt install curlStep 3: Set a static IP addressNow, here’s a crucial part. Proxmox expects a stable network connection, and having a dynamic IP (which can change after a reboot) will break the setup. Trust me, I learned this the hard way when my web interface refused to load after a restart. The easiest way is to set up a DHCP reservation in your router. But if you don’t have access to your router, you can configure the static IP directly on your Pi. Edit the dhcpcd.conf file: sudo nano /etc/dhcpcd.conf Add the following lines at the end (replace the placeholders with your details): interface [INTERFACE] static ip_address=[STATIC IP ADDRESS YOU WANT]/24 static routers=[ROUTER IP] static domain_name_servers=[DNS IP] Save and reboot with: sudo reboot nowAfter the reboot, verify your static IP with: hostname -IStep 4: Modifying the hosts file With your static IP set, we need to make Proxmox aware of it by updating the hosts file. This ensures your Pi’s hostname maps correctly to its IP address. Open the hosts file for editing: sudo nano /etc/hosts You’ll see a line like this: 127.0.1.1 raspberrypiReplace 127.0.1.1 with your Pi’s static IP. For example: 192.168.1.9 raspberrypiStep 5: Setting up the root userProxmox requires the root user for its web interface. By default, Raspberry Pi OS doesn’t have a password set for the root user, so let’s create one: sudo passwd root Enter a strong password when prompted. You’ll need this later to log in to Proxmox. Step 6: Add the GPG keyProxmox for ARM isn’t officially supported, but a third-party repository makes it possible. First, we need to add its GPG key to authenticate the packages: curl -L https://mirrors.apqa.cn/proxmox/debian/pveport.gpg | sudo tee /usr/share/keyrings/pveport.gpg >/dev/null This step ensures that the packages we’re about to install are legitimate. Step 7: Add the repositoryNow, let’s add the Proxmox repository to the package manager’s sources list: echo "deb [arch=arm64 signed-by=/usr/share/keyrings/pveport.gpg] https://mirrors.apqa.cn/proxmox/debian/pve bookworm port" | sudo tee /etc/apt/sources.list.d/pveport.list Step 8: Update the package listWhenever you add a new repository, you need to refresh the package list so your system knows about the new software: sudo apt update Step 9: Install ProxmoxFinally, install Proxmox and its required packages: sudo apt install proxmox-ve postfix open-iscsi ifupdown2 pve-edk2-firmware-aarch64 proxmox-ve: This is the main Proxmox Virtual Environment package that sets up the Proxmox server, including the tools and user interface for managing virtual machines and containers.postfix: A mail server used by Proxmox to send email notifications, such as alerts or updates about your virtual environment. You can configure it as "Local only" if you're unsure or don't need external email functionality.open-iscsi: Provides iSCSI (Internet Small Computer Systems Interface) support, enabling Proxmox to connect to and manage remote storage over a network.ifupdown2: A network management tool that Proxmox relies on for configuring and managing network interfaces, especially for virtual machine bridge setups.pve-edk2-firmware-aarch64: This is the ARM64 firmware package for Proxmox, enabling the virtualization of ARM-based systems, which is essential for running Proxmox on Raspberry Pi.During installation, select “Local only” when configuring Postfix, and use the default mail name if unsure. Step 10: Accessing the proxmox web interfaceAfter installation, access the Proxmox web interface in your browser: https://<IPADDRESS>:8006 Since Proxmox uses a self-signed SSL certificate, you’ll likely encounter a warning about the site’s security. Don’t worry, this is expected. Simply proceed by clicking through the warning, and you’ll land on the Proxmox login page. Log in using root as the username and the password you set earlier. After logging in for the first time, Proxmox will greet you with a notification about an invalid subscription. This is because the free version of Proxmox doesn’t come with a commercial subscription. Just click OK to dismiss the message. You’ve officially made it into Proxmox VE! The dashboard gives you an overview of your server’s health, including CPU usage, memory, and storage stats. Now, you’re ready to create your first virtual machine (VM). To do this, click the Create VM button in the top-right corner of the interface. The intuitive wizard will guide you through the process of spinning up a new virtual machine. While setting up a VM is outside the scope of this article, we’d be happy to cover it in a follow-up. If you'd like a detailed guide on creating and managing VMs in Proxmox, let us know in the comments below! ConclusionAnd that’s it! Seeing Proxmox running on a Raspberry Pi is nothing short of amazing. It’s a testament to how far computing power has come, enabling a tiny device like the Pi to host and manage virtual environments. That said, there’s still plenty more to explore. What else can this little powerhouse do with Proxmox installed? I’ll be diving deeper into its capabilities and perhaps share some along the way. Meanwhile, here's a good place to start learning Proxmox. Use Proxmox for Virtual MachinesA mini-course that covers everything from installing and upgrading Proxmox to using it for creating and managing VMs.Linux HandbookDoron Beit-HalahmiIf you have any doubts, questions, or find yourself stuck during the installation process, don’t hesitate to ask in the comments. I’d love to help you out!
-
Learn Bash Quickly
by: Ahmed Alkabary Sat, 30 Aug 2025 17:51:44 +0530 Learn Bash Quickly will teach you everything you need to get started with bash scripting. Each bash concept is explained with easy to understand examples. You'll learn to: Create and run a bash scriptUse variables and pass arguments to scriptUse decision-making statements (if-else, switch)Perform arithmetic and string operationsUse arrays, loops and functions in bashAutomate repeated tasks with bash scriptsYou'll also find additional exercises at the end of each chapter. Solutions to these exercises have also been included in the book. By the end of the book, you'll learn to automate repeated tasks in Linux with bash scripts on your own. If you are a Pro member, you get this and all our eBooks and courses for free. The ebooks are yours to keep forever, even if you end your membership. Sign up for Pro membership and save money. Alternatively, you can purchase just this book from Gumroad. Get the book
-
Learn Ansible Quickly
by: Ahmed Alkabary Sat, 30 Aug 2025 17:43:09 +0530 Learn Ansible Quickly is a fully practical hands-on guide for learning Ansible Automation. It will get you up and running with Ansible in no time. With this book, you'll learn how to automate your apps deployment and IT infrastructure operations with Ansible. Key Features Run Ansible Ad-Hoc commands.Deploy Files with Jinja2 templates.Create and run Ansible Playbooks.Use Ansible Vault to protect sensitive information.Use Ansible Galaxy to install and use Ansible roles.Learn various Ansible troubleshooting techniques.Ansible is one of the most popular DevOps tools available in the IT market today. Any serious sysadmin or DevOps person must know Ansible. This book is an amazing preparation guide for anyone wants to pass the EX294 certification exam and become a Red Hat Certified Engineer (RHCE). If you are a Pro member, you get this and all our eBooks and courses for free. The ebooks are yours to keep forever, even if you end your membership. Sign up for Pro membership and save money. Alternatively, you can purchase just this book from Gumroad. Get the book
-
Learn Docker Quickly
by: Abdullah Tarek Sat, 30 Aug 2025 17:31:51 +0530 Docker has become the backbone of modern DevOps and cloud-native development. Docker for Beginners is a practical, beginner-friendly guide that walks you through the core concepts of containerization with real commands, examples, and explanations. Whether you're a developer, sysadmin, or curious learner with basic Linux knowledge, this book will give you the confidence to work with Docker effectively. Chapter 1: Introduction to Docker Understand what Docker is, how it compares to virtual machines, and how it solves environment consistency issues. Chapter 2: Setting Up Your Docker Environment Install Docker on Linux and run your first container. Chapter 3: Manipulating Docker Containers Learn how to start, stop, rename, and interact with containers, including using detached mode and executing commands inside them. Chapter 4: Understanding Docker Images Explore how Docker images work, how to build them, and how layering and versioning operate under the hood. Chapter 5: Docker Volumes and Data Persistence Learn to manage persistent data using volume and bind mounts. Chapter 6: Exploring Dockerfiles Write your own Dockerfiles and build images for custom apps. Chapter 7: Docker Compose Create and manage multi-container applications using docker-compose.yml. Chapter 8: Docker Networking Dive into Docker’s networking modes, including bridge, host, and custom networks. By the end of this book, you’ll have a solid foundation in Docker, enabling you to build, run, and manage containerized applications with ease. It's the perfect starting point for anyone aiming to enter the world of DevOps or cloud computing or even self-host. If you are a Pro member, you get this and all our eBooks and courses for free. The ebooks are yours to keep forever, even if you end your membership. Sign up for Pro membership and save money. Alternatively, you can purchase just this book from Gumroad. Get the book
-
Learn Linux Quickly
by: Abhishek Prakash Sat, 30 Aug 2025 16:58:22 +0530 Learn Linux Quickly doesn't assume any prior Linux knowledge, which makes it a perfect fit for beginners. Nevertheless, intermediate and advanced Linux users will still find this book very useful as it goes through a wide range of topics. Learn Linux Quickly will teach you the following topics: Installing LinuxOver 116 Linux CommandsUser and Group ManagementLinux Networking FundamentalsBash ScriptingAutomate Boring Tasks with Cron JobsCreate your own Linux CommandsLinux Disk Partitioning and LVMFinding Files on LinuxUnderstanding File PermissionsLinux Processes💡Sign up for Pro membership and get all these eBooks and access our courses for just $50 per year. The books are yours to keep forever, even if you end your membership. If you are a Pro member, you get this and all our eBooks and courses for free. The ebooks are yours to keep forever, even if you end your membership. Alternatively, you can purchase just this book from Gumroad. Get the book
-
CSS Elevator: A Pure CSS State Machine With Floor Navigation
by: Christian Sabourin Fri, 29 Aug 2025 13:06:48 +0000 As a developer with a passion for state machines, I’ve often found myself inspired by articles like “A Complete State Machine Made with HTML Checkboxes and CSS.” The power of pure CSS-driven state machines intrigued me, and I began to wonder: could I create something simpler, more interactive, and without the use of macros? This led to a project where I built an elevator simulation in CSS, complete with direction indicators, animated transitions, counters, and even accessibility features. In this article, I’ll walk you through how I used modern CSS features — like custom properties, counters, the :has() pseudo-class, and @property — to build a fully functional, interactive elevator that knows where it is, where it’s headed, and how long it’ll take to get there. No JavaScript required. CodePen Embed Fallback Defining the State with CSS Variables The backbone of this elevator system is the use of CSS custom properties to track its state. Below, I define several @property rules to allow transitions and typed values: @property --current-floor { syntax: "<integer>"; initial-value: 1; inherits: true; } @property --previous { syntax: "<number>"; initial-value: 1; inherits: true; } @property --relative-speed { syntax: "<number>"; initial-value: 4; inherits: true; } @property --direction { syntax: "<integer>"; initial-value: 0; inherits: true; } These variables allow me to compare the elevator’s current floor to its previous one, calculate movement speed, and drive animations and transitions accordingly. A regular CSS custom property (--current-floor) is great for passing values around, but the browser treats everything like a string: it doesn’t know if 5 is a number, a color, or the name of your cat. And if it doesn’t know, it can’t animate it. That’s where @property comes in. By “registering” the variable, I can tell the browser exactly what it is (<number>, <length>, etc.), give it a starting value, and let it handle the smooth in-between frames. Without it, my elevator would just snap from floor to floor, and that’s not the ride experience I was going for. A Simple UI: Radio Buttons for Floors Radio buttons provide the state triggers. Each floor corresponds to a radio input, and I use :has() to detect which one is selected: <input type="radio" id="floor1" name="floor" value="1" checked> <input type="radio" id="floor2" name="floor" value="2"> <input type="radio" id="floor3" name="floor" value="3"> <input type="radio" id="floor4" name="floor" value="4"> .elevator-system:has(#floor1:checked) { --current-floor: 1; --previous: var(--current-floor); } .elevator-system:has(#floor2:checked) { --current-floor: 2; --previous: var(--current-floor); } This combination lets the elevator system become a state machine, where selecting a radio button triggers transitions and calculations. Motion via Dynamic Variables To simulate elevator movement, I use transform: translateY(...) and calculate it with the --current-floor value: .elevator { transform: translateY(calc((1 - var(--current-floor)) * var(--floor-height))); transition: transform calc(var(--relative-speed) * 1s); } The travel duration is proportional to how many floors the elevator must traverse: --abs: calc(abs(var(--current-floor) - var(--previous))); --relative-speed: calc(1 + var(--abs)); Let’s break that down: --abs gives the absolute number of floors to move. --relative-speed makes the animation slower when moving across more floors. So, if the elevator jumps from floor 1 to 4, the animation lasts longer than it does going from floor 2 to 3. All of this is derived using just math expressions in the CSS calc() function. Determining Direction and Arrow Behavior The elevator’s arrow points up or down based on the change in floor: --direction: clamp(-1, calc(var(--current-floor) - var(--previous)), 1); .arrow { scale: calc(var(--direction) * 2); opacity: abs(var(--direction)); transition: all 0.15s ease-in-out; } Here’s what’s happening: The clamp() function limits the result between -1 and 1. 1 means upward movement, -1 is downward, and 0 means stationary. This result is used to scale the arrow, flipping it and adjusting its opacity accordingly. It’s a lightweight way to convey directional logic using math and visual cues with no scripting. Simulating Memory with --delay CSS doesn’t store previous state natively. I simulate this by delaying updates to the --previous property: .elevator-system { transition: --previous calc(var(--delay) * 1s); --delay: 1; } While the delay runs, the --previous value lags behind the --current-floor. That lets me calculate direction and speed during the animation. Once the delay ends, --previous catches up. This delay-based memory trick allows CSS to approximate state transitions normally done with JavaScript. Floor Counters and Unicode Styling Displaying floor numbers elegantly became a joy thanks to CSS counters: #floor-display:before { counter-reset: display var(--current-floor); content: counter(display, top-display); } I defined a custom counter style using Unicode circled numbers: @counter-style top-display { system: cyclic; symbols: "\278A" "\2781" "\2782" "\2783"; suffix: ""; } The \278A to \2783 characters correspond to the ➊, ➋, ➌, ➃ symbols and give a unique, visual charm to the display. The elevator doesn’t just say “3,” but displays it with typographic flair. This approach is handy when you want to go beyond raw digits and apply symbolic or visual meaning using nothing but CSS. Accessibility with aria-live Accessibility matters. While CSS can’t change DOM text, it can still update screenreader-visible content using ::before and counter(). <div class="sr-only" aria-live="polite" id="floor-announcer"></div> #floor-announcer::before { counter-reset: floor var(--current-floor); content: "Now on floor " counter(floor); } Add a .sr-only class to visually hide it but expose it to assistive tech: .sr-only { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; } This keeps the experience inclusive and aligned with accessibility standards. Practical Applications of These Techniques This elevator is more than a toy. It’s a blueprint. Consider these real-world uses: Interactive prototypes without JavaScript Progress indicators in forms using live state Game UIs with inventory or status mechanics Logic puzzles or educational tools (CSS-only state tracking!) Reduced JavaScript dependencies for performance or sandboxed environments These techniques are especially useful in static apps or restricted scripting environments (e.g., emails, certain content management system widgets). Final Thoughts What started as a small experiment turned into a functional CSS state machine that animates, signals direction, and announces changes, completely without JavaScript. Modern CSS can do more than we often give it credit for. With :has(), @property, counters, and a bit of clever math, you can build systems that are reactive, beautiful, and even accessible. If you try out this technique, I’d love to see your take. And if you remix the elevator (maybe add more floors or challenges?), send it my way! CSS Elevator: A Pure CSS State Machine With Floor Navigation originally published on CSS-Tricks, which is part of the DigitalOcean family. You should get the newsletter.
-
LHB Linux Digest #25.24: Learning Corners, apropos, Proxmox Monitoring, Handling Huge Log with Docker
by: Abhishek Prakash Fri, 29 Aug 2025 17:03:32 +0530 Have you checked the "learning corner" on the redesigned Linux Handbook website? It's a page from where you can access collections of tutorials on a specific topic, like Nano or Vim. Learning CornerStart learning in a more organized and streamlined mannerLinux HandbookAbhishek PrakashThis is different from our courses, as those are more hands-on in approach and they teach you things in a sequence. The collections in Learning Corner are different as they are more of an assortment of tutorials on a specific topic organized in a sequence but not as cohesive as a course. I will be adding more collections in the Learning Corner in coming days. By the way, I use Arch what do you think of the term "learning corner"? If you have a better suggestion, please let me know. If I like your suggestion and use it, you will get 1 year of Pro subscription for free (if you don't have it already) 😄 This post is for subscribers only Subscribe now Already have an account? Sign in
-
Single Docker Container Generated 20 GB of Log. Here's How I Reclaimed Disk Space
by: Abhishek Prakash Fri, 29 Aug 2025 12:40:58 +0530 I use Ghost CMS for my websites. Recently, they changed their self-hosting deployment recommendation to Docker instead of native installation. I took the plunge and switched to the Docker version of Ghost. Things were smooth until I got notified about disk running out of space. When I investigated to find which folders were taking the most space, I was surprised to see a Docker container taking around 21 GB of disk storage. And it was a container, not Docker volume or image or overlay. Looking closer, I saw a single json log file that took 20 GB of disk space. Unusual, right? I mean I was expecting logs to play a role here but I didn't expect it to find it here. I certainly needed to revise the Docker logging concepts. Let me share how I fixed the issue for me. Using log rotate in docker composeThe solution was to define log rotation in the docker compose file in this manner: logging: driver: "json-file" options: max-size: 100M max-file: "5" Which basically tells the container to use json log files but not exceeding the 100 MB size. If it does, it will create a new log file. The total number of log files at a time won't exceed 5. You can change these value as desired. But it is more than that. You need to identify which service/conatiner was generating the huge log files. Although, you could put it under all the containers and make it "log-eating-disk-space-proof". My setup involves a docker compose file. I believe most deployments running on Docker use compose as it often takes more than one service as you often have a server, a database and more components. My first challenge was to find which Docker container was causing the issue. If there are multiple container running, you can identify which one is it by running: docker psIt will show the contaier IDs. The first few digits of the folder in /var/lib/docker/container should match this container ID. This way, you identify which container it is that causes such huge log outputs. As you can see in the two screenshots I shared, the problem was with c702a1916f62ed6b67588f1f244a2d590fae41658c17bd3ef7b298babbc4dbb0 which is from the caddy container with ID c702a1916f62. So, I modified the compose.yml file with the section I shared earlier. Here's what the compose file looked now: Restarted the service with: docker compose up -dThis had two impacts. Since new containers were created, the older container c702a1916f62 got destroyed and disk space was freed automatically. And the new container created smaller log files. As you can see in the screenshot above, there are five log files with less than 100 MB in size. What if you do not use compose?If you are not using docker compose and has a single container, you can run the container with added parameters: --log-opt max-size=100m --log-opt max-file=5This could be a pseudocode for reference: sudo docker run -ti --name my-container --log-opt max-size=100m --log-opt max-file=5 debian /bin/bashSet it up for all the docker containers, system wideYou could also configure the Docker daemon to use the same logging policy by creating/editing /etc/docker/daemon.json file: { "log-driver": "json-file", "log-opts": {"max-size": "100m", "max-file": "5"} }Once you do that, you should restart the systemd service: systemctl reload dockerI am sure there are other or perhaps better (?) ways to handle this situation. For now, this setup works for me so I am not going to experiment any further, specially not in a production environment. Hope it teaches you a few new things and helps you regain the precious disk space on your Linux server.
-
19 Beautiful Themes to Get a Better Visual Experience With VS Code
by: Abhishek Kumar Fri, 29 Aug 2025 03:43:22 GMT Let’s be honest, there’s nothing wrong with the default Visual Studio Code theme. It’s clean, it works, and I actually used it for quite a while. That is… until one day I stumbled upon a YouTube tutorial where the developer’s editor looked incredible. Sleek colors, stylish syntax highlighting, suddenly, my good ol’ default theme felt a little boring. That rabbit hole led me to explore the wonderful world of VS Code themes. Since then, I’ve tried a bunch, curated some favorites, and even picked out a few that are massively popular among developers. This article is my personal roundup to help you get started. It’s not a definitive list, there are hundreds out there but if you’re new to custom VS Code themes, this is a great place to begin. 1. Dracula OfficialDracula is a dark, high-contrast theme that has gained a cult following for good reason. It's stylish without being over-the-top, and it helps reduce eye strain during long coding marathons. Key Features✅ Dark, moody aesthetic perfect for low-light environments ✅ Excellent contrast between code elements ✅ Seamless integration across VS Code UI ✅ Used by many developers and YouTubers for its readability Dracula Official2. One Dark ProOne Dark Pro brings Atom’s beloved “One Dark” theme to VS Code, and it’s just as sharp and modern as ever. If you want a professional and polished look, this is a reliable pick. Key Features✅ Inspired by Atom’s One Dark theme ✅ High readability with strong contrast ✅ Regularly updated and maintained ✅ Works great across many programming languages One Dark Pro3. AyuAyu is minimal, calm, and pleasing to the eyes. It comes in three flavors - Light, Mirage, and Dark, so you can match your coding mood with your environment. Key Features✅ Minimalist design with soft color tones ✅ Three versions: Ayu Light, Ayu Mirage, and Ayu Dark ✅ Low distraction, easy-to-read syntax coloring ✅ Favored by course creators like CodeWithMosh Ayu4. Tokyo NightInspired by the neon lights of Tokyo, this theme is a stylish blend of cool blues and subtle purples. It's perfect if you want something modern yet easy on the eyes. Key Features✅ Visually rich, inspired by Tokyo’s nightscape ✅ Low-contrast UI with clear syntax highlights ✅ Semantic highlighting for better code clarity ✅ Available for other editors like Vim and iTerm Tokyo Night5. GitHub ThemeWant your VS Code to look like GitHub? This official theme does exactly that. It’s familiar, balanced, and comes with modes for different lighting preferences. Key Features✅ Light, dark, and colorblind-friendly modes ✅ Clean and familiar GitHub look ✅ Open-source and customizable ✅ Great for developers already using GitHub extensively GitHub Theme6. NoctisNoctis is a modern theme that comes in multiple variations - light and dark, to suit any mood. It’s especially great if you want a lighter theme without blinding brightness. Key Features✅ Comes in multiple light and dark variations ✅ Elegant design with smart syntax color choices ✅ Clean UI that doesn’t distract from code ✅ Over a million installs and counting Noctis7. Shades of PurpleIf you’re into vibrant colors and want your editor to stand out, Shades of Purple might be your new favorite. Created by developer Ahmad Awais, it’s bold and beautiful. Key Features✅ Unique purple-toned color palette ✅ Great readability with striking contrast ✅ Open-source and easy to tweak ✅ Adds flair without sacrificing usability Shades of Purple8. Night Owl / Light OwlNight Owl is designed specifically for night-time coders, with high contrast that’s easy on the eyes. Prefer a brighter option? Light Owl is the lighter counterpart. Key Features✅ Designed for readability in low-light settings ✅ Strong contrast without harsh brightness ✅ Light and dark versions available ✅ Cross-platform availability (Hyper, Vim, etc.) Night Owl / Light Owl9. Monokai ProMonokai Pro adds a polished twist to the classic Monokai theme. With balanced color filters, beautiful syntax highlighting, and pixel-perfect design, this theme feels professional and productive. Key Features✅ Polished version of the original Monokai ✅ Customizable filters and UI tweaks ✅ Eye-friendly for long sessions ✅ Available as part of a paid package (with free trial) Monokai Pro10. Cobalt2Created by Wes Bos, Cobalt2 is bold and playful without sacrificing usability. Its distinctive blue and yellow color combo stands out and is great if you want something different. Key Features✅ Designed by a popular web developer ✅ Unique color palette with good contrast ✅ Works across editors and terminals ✅ Open-source and customizable Cobalt211. Bluloco LightBluloco Light offers a clean and airy look with thoughtful design choices. It’s ideal for developers who work in bright environments and want a professional, minimal style. 💡Bluloco is also available in a Dark variant: Bluloco DarkKey Features✅ Light theme with a refined, minimal aesthetic ✅ Consistent syntax coloring ✅ Balanced, readable contrast ✅ A great option if you prefer clean and modern Bluloco Light12. SynthWave '84SynthWave '84 is a retro-futuristic theme inspired by the 1980s, featuring neon colors and even an optional glow effect for extra flair. If you want something bold and eye-catching, this one’s for you. Key Features✅ Neon vibes and cyberpunk aesthetic ✅ Optional glow effect (via extension) ✅ Highly popular among front-end developers ✅ Supports syntax across major languages SynthWave '8413. Horizon ThemeHorizon is a warm, reddish-orange tinted dark theme. It’s subtle, modern, and carefully designed for comfort over long coding sessions. Key Features✅ Warm, earthy color tones ✅ Balanced contrast for daily use ✅ Available in both dark and bright variants ✅ Great for front-end and full-stack development Horizon Theme14. Panda ThemePanda is a soft, minimal dark theme with pastel accents. It's built for readability and calm, avoiding harsh contrasts without sacrificing clarity. Key Features✅ Soft pastel syntax coloring ✅ Minimal and distraction-free ✅ Excellent for late-night coding ✅ Available for terminals and editors Panda Theme15. AndromedaAndromeda is a high-contrast dark theme with bold, saturated colors. It’s sharp, vibrant, and particularly suited to developers who like strong visual distinctions in their code. Key Features✅ Vibrant colors with high contrast ✅ Great for distinguishing syntax elements ✅ Maintains a clean, focused interface ✅ Works well with dark desktop environments Andromeda16. Winter is ComingWinter is Coming offers light, dark, and dark with no italics variants. It’s crisp, elegant, and excellent if you want clarity without visual clutter. Key Features✅ Clean, cool-toned color palette ✅ Multiple variants (including no italics) ✅ High readability across languages ✅ Ideal for clean, professional setups Winter is Coming17. NightFoxNightFox is part of the "Fox" theme family (includes NightFox, DayFox, DawnFox, etc.). It's a soothing dark theme with carefully curated contrast for better accessibility. Key Features✅ Carefully calibrated color palette ✅ Designed with accessibility in mind ✅ Multiple variants available ✅ Consistent UI and terminal look NightFox18. PalenightPalenight is a calm, visually appealing theme with a palette of soft purples, blues, and pinks. It’s stylish without being overwhelming. ✅ Key Features✅ Soothing colors and modern aesthetic ✅ Strong readability for long hours ✅ Easy on the eyes with subtle contrast ✅ Works well across many languages Palenight19. Catppuccin Catppuccin has become the hot favorite among savvy computer users. The soothing, pastel colors have a different charm and it is available for so many applications. From VS Code to Xfce terminal, it is available for more than 300 applications. And that makes it an ideal choice for people who would like the uniform look across various apps. The Catppuccin theme comes in four variants: Latte, Frappé, Macchiato and Mocha. Except Latte, all of them are dark themed. ✅ Key Features✅ Soothing pastel colors ✅ Dark and light shades ✅ Highly popular among developers ✅ Available for a huge number of other applications CatppuccinWrapping UpAt the end of the day, themes are a very personal part of your coding experience. As a web developer, I’ve experimented with a wide range of VS Code themes over the years and while I appreciate a good dark theme like Dracula or One Dark Pro, I’ll admit something that might be a bit controversial: I actually prefer light mode or even high contrast themes! For me, coding in daylight or bright environments feels more natural with a lighter background. But that’s just my preference, and that’s the beauty of themes: there’s something for everyone. Have a favorite theme I didn’t mention? Or do you swear by dark mode no matter what? Let me know in the comments. I’d love to hear what themes power your VS Code setup!
-
406: Hot Trends of 2025
by: Chris Coyier Thu, 28 Aug 2025 14:01:41 +0000 Marie and Chris jump on to discuss some of the trends of what people are building on CodePen here, approximately halfway through 2025. New CSS! Custom @functions (just landed) if() function clip-path & shape() corner-shape and the superellipse Scrolling stuff The attr() power up Hot Styles Liquid glass (Jhey’s demo, Spark) Hard glitch (CRT-like effect with VFX-JS, Glitchy button hover effect with VFX-JS, ❍ Cinematic Glitch Slideshow) Holographics (CSS Holographic Masks) Grainy textures (Grainy distorted interactive 1 gradient blobs) Innovative blurs (wavy wobbly lava orb, Bubbles Background Animation) New color spaces (OKLCH Swatch Example, CSS Color Functions, CSS oklch Gradation) Hot Pens Petr Knoll’s Glass Button (From February, well ahead of liquid glass) Mike Bespalov’s Monospace ASCII art generator (known to be “vibe coded”) Adam Kuhn’s Severance Lumon Macrodata Refinement Steve Gardner’s “Who Needs Shaders” Collection of Pens Discussed in CodePen Radio 406 Time Jumps 00:06 406 00:31 Circling back to Marie 03:00 CSS is so cool right now 08:20 Clip path shapes 17:22 Liquid Glass is trending now 21:28 Glitching and datamoshing styles 24:48 Classic holographic textures 26:26 Grainy textures 30:03 AI is affecting trends on CodePen 37:53 4 hot pens from this year so far
-
Role Model Blog: Ida Toivari, Nokia
by: Ani Thu, 28 Aug 2025 09:51:04 +0000 Technology definitely helps us get better. It brings inclusion and equality into the world, especially when access to technological solutions is extended to more people. That’s something that deeply motivates me to stay in the IT field. For me, work needs to have a purpose. I need to feel that what I do contributes to something meaningful. About meMy name is Ida Toivari, and I work at Nokia as a Transformation Manager. For the past five and a half years, I’ve been part of Mobile Networks global R&D, specifically focusing on the Radio Access Network area. My role in internal communications and transformation involves creating the frameworks for communications, innovating new ways of doing things and reaching people in a meaningful way. A lot of my time goes into meetings and connecting with people to stay on top of what’s happening across the organization. That helps me understand what needs to be communicated and how to make complex topics more understandable. Joining NokiaI joined Nokia by chance. I was pursuing my master’s degree in international business management and was considering a career in management consulting. But then a Communications Trainee position at Nokia was opened, and I decided to apply. During the interview, it just clicked—it felt like the right fit. Since then, I’ve grown a lot in my role. I started as a trainee and worked across internal communications—planning, content creation, leadership support, and innovating ways to communicate. As the years have passed, I have taken on more responsibility in coordination, strategic planning, and transformation projects. Ida Toivari, Transformation Manager, Nokia Skills necessary to succeed in my role One of the most important skills is listening—really listening—and being able to read situations and people. That has helped me adapt, especially coming from a business background without prior knowledge of mobile networks. Since the beginning, I’ve been asking a lot of questions and actively learning from the people around me. Building relationships and maintaining open communication across teams has been essential. Beyond that, project management and coordination skills have been key to succeeding in my role. Effective communication enables clarity, alignment, and change Sometimes people assume that communication is a minor or secondary function—something on the side rather than something that drives change. I find it important to show that effective communication enables clarity, alignment, and change. I’ve been lucky to work with people who do see the value, especially within my team. What comes to stereotypes, I do think that many stereotypes overall are interconnected. So, it is important to keep in mind that being a woman is not the only thing that provokes a reaction. Being proud of your identity is important in facing such situations. Finding the balanceFor me, balance is key. I work with passion, but I also value my free time. I recharge by doing things I enjoy— like sports, music, and cooking. Taking cooking as an example, it helps me relax because it’s something I can see the results of and enjoy right away. Additionally, nature is very important to me. Being in nature reminds me of what matters; it clears my thoughts. And I could even say it’s my way of meditating. Combining nature and strategic thinking with orienteeringI also run and go to the gym, but my long-time hobby is orienteering. It’s a very Finnish sport—running through the forest with a map and compass, finding checkpoints. Orienteering reminds me that even the best can get lost, and it teaches humility as we are all equal out there in the woods. An interesting aspect of orienteering is that it requires strategic thinking – you make a strategy to find your checkpoints, follow that, adjust and make quick decisions on the go. Working at NokiaAt Nokia, we enjoy an environment where the hierarchy is quite low. Everyone’s opinion is valued. It doesn’t matter if you’re a trainee or an executive leader – if you have something to say, it is heard. I feel that I can have an impact on things. We have a lot of flexibility on how we work, but I actually go almost every day to the office. I feel that I get more when I go there. I get to build relationships. But it’s good to have the feeling of flexibility, that if one day I want to work from home, it’s simply fine and there’s no hassle around it. My motivation to continue in the IT fieldTechnology definitely helps us get better. It brings inclusion and equality into the world, especially when access to technological solutions is extended to more people. That’s something that deeply motivates me to stay in the IT field. For me, work needs to have a purpose. I need to feel that what I do contributes to something meaningful. Keeping yourself up to dateFor me, loads of learning happens simply through other people. There’s so much valuable, unwritten knowledge you pick up through conversations and collaboration by being active and open. I also stay updated by actively following trends and developments, e.g. through LinkedIn. I read articles, updates in social media and books. I do enjoy reading both fiction and non-fiction, especially books related to leadership and personal development. One of my favorite books is The Confidence Code by Katty Kay and Claire Shipman, exploring the role of confidence in women’s careers. My favorite quoteMy favorite quote is “In a world where you can be anything, be kind.” I love this quote because it applies to every situation, both in personal life and at work. I believe we do need more kindness, and that doesn’t mean avoiding conflict or saying yes to everything. In fact, it’s quite the opposite: it means being honest, stepping up for others, and respecting both your own and others’ boundaries. The post Role Model Blog: Ida Toivari, Nokia first appeared on Women in Tech Finland.
-
FOSS Weekly #25.35: New Gerhwin DE, grep Command, Nitro init system, KDE Customization and More Linux Stuff
by: Abhishek Prakash Thu, 28 Aug 2025 05:50:35 GMT It's FOSS Community Forum is now open for free registration. Earlier, it was tied up with It's FOSS membership and allowed a single click login with It's FOSS. Going back to the old roots is more due to technical limitations. I share the details in the forum post, if you are interested in learning more about it. I was also expecting Mint 22.2 to release this week but it is not out yet. I'll keep you posted when it releases. 💬 Let's see what else you get in this edition New LibreOffice release brings 30% faster file loading.GhostBSD introduces the Gershwin desktop environment.New minimalist init systemA new, modern e-book reader app for Linux users.And other Linux news, tips, and, of course, memes!This edition of FOSS Weekly is supported by NocFree keyboards.NocFree&: Ergonomic Split Keyboard — early bird liveEarly bird pricing saves you moneyNocFree& is an ergonomic split keyboard that keeps shoulders open and wrists aligned for healthier typing. 75% layout you know, so there’s no steep learning curve. Programmable layers and macros for full control. Tri-mode wireless, low-profile switches, and a softer, quieter feel. Early bird pricing live on Kickstarter. Get NocFree & keyboard at a discounted early bird price📰 Linux and Open Source NewsCompact AI module promises Jetson Nano compatibility and a powerful RK3588 chip.Chromium adds native HDR support for Linux Wayland.AMD’s open source moment reveals their future GPU plans.NVIDIA’s AGX Thor dev kit delivers substantial AI power for robotics.Google's new guidelines forbid sideloading of apps. End of era for APK?LibreOffice 25.8 release makes file loading 30% faster.GhostBSD has unveiled a new desktop environment inspired by OS X looks. GhostBSD Comes Up With Gershwin, A New Desktop Environment With OS X Like LooksGhostBSD with a surprise release.It's FOSS NewsSourav Rudra🧠 What We’re Thinking AboutIt's not the first time we have wondered what will happen to Linux after Torvalds. Who will maintain the future? Rethinking open source leadership for a new generationOpen source is aging. We can better support Gen Z contributors through purpose, flexibility, and pathways to leadership.The GitHub BlogAbigail Cabunoc MayesChinese AI models are thriving as they adopt open source model. Can the US recapture its AI lead? Project Atom aims for that. Can America Catch Up? The ATOM Project Takes on China’s AI LeadU.S. tech leaders rally behind effort to counter Chinese model dominance.It's FOSS NewsSourav Rudra🧮 Linux Tips, Tutorials, and LearningsCheck out the list of non-violent games on Steam to play on Linux.VPNs that promise a 'no logging policy'.Using Hyprland? Save your eyes by configuring the nightlight feature.Explore the grep command with these examples. grep Command Examples in LinuxGrep is a useful command to help you quickly search and find through file contents.It's FOSSSagar Sharma👷 AI, Homelab and Hardware CornerWant to use the services running in your homelab from outside your home? Cloudflare Tunnels can help you out. Use Cloudflare Tunnels to Access Homelab Outside Local NetworkSelf hosting various open source software on your local system and now want to use it from anywhere? Cloudflare Tunnel comes to your help.It's FOSSAbhishek Kumar✨ Project HighlightThere is a new init system in making. Discover Nitro, the minimalist init system. Despise Systemd? A New Init System Debuts as a Minimalist Process Supervisor for LinuxNitro is a simple, tiny but flexible init system. It is under heavy development currently.It's FOSS NewsSourav RudraA reader shared this fork of Foliate that doesn't use Electron framework and has more features for your ebook needs. I will be testing it soon. Readest — Where You Read, Digest and Get InsightReadest brings your entire library to your fingertips. Read seamlessly across all your devices with our cross-platform ebook reader.Midorix is a simple, stateless, lightweight make-like tool written in C powered by Lua. GitHub - Bimasakti1024/Midorix: A simple, stateless, lightweight make-like tool written in C powered by Lua.A simple, stateless, lightweight make-like tool written in C powered by Lua. - Bimasakti1024/MidorixGitHubBimasakti1024📽️ Videos I am Creating for YouWhen I shared the Xfce customization video, some people requested a similar video on KDE customization. Took some time, but it is finally here. Subscribe to It's FOSS YouTube Channel🧩 Quiz TimeYour mission, should you choose to accept it, is to match the classic commands with their modern (supposedly) replacements. Can you do it? Match Classic Linux Commands with Their Modern AlternativesMatch the good old, classic Linux commands with their supposedly modern alternative CLI tools. See, how modern you are!It's FOSSAbhishek Prakash Desktop Linux is mostly neglected by the industry but loved by the community. For the past 13 years, It's FOSS has been helping people use Linux on their personal computers. And we are now facing the existential threat from AI models stealing our content. If you like what we do and would love to support our work, please become It's FOSS Plus member. It costs $24 a year (less than the cost of a burger meal each month) and you get an ad-free reading experience with the satisfaction of helping the desktop Linux community. You also get a Linux eBook for free. Join It's FOSS Plus 💡 Quick Handy TipIn Nautilus file manager, go to preferences. Scroll down to the bottom and in the Grid View Captions section, set the First as Detailed Type. Now, in the icons view, you can get a detailed type of each files, like Python 3 Script, Shell script, Rust source code, etc. 🤣 Meme of the WeekYou'll get it if you use Instagram 😄 🗓️ Tech TriviaDid you know? Linux Mint was first released on 27 August 2006, starting as a simple Ubuntu-based distribution with a handful of tweaks. Over the years, it grew into one of the most popular desktop Linux distros, known for its user-friendly Cinnamon desktop, stability, and the philosophy of “from freedom came elegance.” 🧑🤝🧑 FOSSverse CornerCan your office suite monitor you? FOSSers in the community are discussing this topic. Office suite monitoring you?I read this from Linux Magazine “Office suites used to be about getting your work done, but the office suites from the big tech giants are getting sinister – monitoring what you do, forcing AI features onto you, and coercing you into buying subscriptions so you can access your data. Fortunately, there are free and open source software options. The versatile LibreOffice office suite gives you everything you need.” What do you think? I this trend real?It's FOSS CommunitynevjAlso, since I moved Ghost CMS that powers It's FOSS websites to a Docker based set up, the single sign on (SSO) option is no longer working for forum log in. You can use your older password, if there was one, or use the reset password feature to set a new one. ❤️ With lovePlease share it with your Linux-using friends and encourage them to subscribe (hint: it's here). Share the articles in Linux Subreddits and community forums. Follow us on Google News and stay updated in your News feed. Opt for It's FOSS Plus membership and support us 🙏 Enjoy FOSS 😄
-
A Radio Button Shopping Cart Trick
by: Preethi Wed, 27 Aug 2025 14:18:12 +0000 Editor’s note: This is a really clever idea that Preethi shared, but you will also see that it comes with accessibility drawbacks because it uses duplicated interactive elements. There are other ways to approach this sort of thing, as Preethi mentions, and we’ll look at one of them in a future article. Two large pizzas for yourself, or twelve small ones for the kids party — everyone’s gone through the process of adding items to an online cart. Groceries. Clothing. Deli orders. It’s great when that process is simple, efficient, and maybe even a little quirky. This post covers a design referred as infinite selection. Metaphorically infinite. Here’s how it works: CodePen Embed Fallback That’s right, you click an item and it jumps right into the shopping cart, complete with a smooth transition that shows it happening. You can add as many items as you want! And guess what: all of it is done in CSS — well, except the part that keeps count of selected items — and all it took is a combination of radio form inputs in the markup. I’m going to walk you through the code, starting with the layout, but before that, I want to say up-front that this is just one approach. There are for sure other ways to go about this, and this specific way comes with its own considerations and limitations that we’ll get into. The Layout Each item (or product, whatever you want to call it) is a wrapper that contains two radio form inputs sharing the same name value — a radio group. <div class="items flat-white"> <input type="radio" name="r3" title="Flat White"> <input type="radio" name="r3" title="Flat White"> </div> When you check one in a duo, the other gets unchecked automatically, leading to a see-saw of check and uncheck between the two, no matter which one is clicked. Each item (or radio group) is absolutely positioned, as are the two inputs it contains: .items { position: absolute; input { position: absolute; inset: 0; } } The inset property is stretching the inputs to cover the entire space, making sure they are clickable without leaving any dead area around them. Now we arrange everything in a layout. We’ll use translate to move the items from a single point (where the centered cart is) to another point that is a litte higher and spread out. You can code this layout anyway you like, as long as the radio buttons inside can make their way to the cart when they are selected. .items { --y: 100px; /* Vertical distance from the cart */ &:not(.cart) { transform: translate(var(--x), calc(-1 * var(--y))); } &.espresso { --x: 0px; /* Horizontal dist. from the cart */ } &.cappuccino { --x: -100%; } &.flat-white { --x: 100%; } } So, yeah, a little bit of configuration to get things just right for your specific use case. It’s a little bit of magic numbering that perhaps another approach could abstract away. Selecting Items When an item (<input>) is selected (:checked), it shrinks and moves (translate) to where the cart is: input:checked { transform: translate(calc(-1 * var(--x)), var(--y)) scale(0); } What happens under the hood is that the second radio input in the group is checked, which immediately unchecks the first input in the group, thanks to the fact that they share the same name attribute in the HTML. This gives us a bit of boolean logic a là the Checkbox Hack that we can use to trigger the transition. So, if that last bit of CSS moves the selected item to the shopping cart, then we need a transition to animate it. Otherwise, the item sorta zaps itself over, Star Trek style, without you telling. input:checked{ transform: translate(calc(-1 * var(--x)), var(--y)) scale(0); transition: transform .6s linear; } Keeping Count The whole point of this post is getting a selected item to the cart. There’s no “Cart” page to speak of, at least for the purposes of this demo. So, I thought it would be a good idea to show how many items have been added to the cart. A little label with the count should do the trick. let n = 0; const CART_CNT = document.querySelector("output"); document.querySelectorAll("[type='radio']").forEach(radio => { radio.onclick = () => { CART_CNT.innerText = ++n; CART_CNT.setAttribute("arial-label", `${n}`) } }); Basically, we’re selecting the cart object (the <output> element) and, for each click on a radio input, we increase an integer that represents the count, which is slapped onto the shopping card icon as a label. Sorry, no removing items from the cart for this example… you’re completely locked in. 😅 Accessibility? Honestly, I wrestled with this one and there probably isn’t a bulletproof way to get this demo read consistently by screen readers. We’re working with two interactive elements in each group, and need to juggle how they’re exposed to assistive tech when toggling their states. As it is, there are cases where one radio input is read when toggling into an item, and the other input is read when toggling back to it. In other cases, both inputs in the groups are announced, which suggests multiple options in each group when there’s only one. I did add a hidden <span> in the markup that is revealed with keyboard interaction as a form of instruction. I’ve also inserted an aria-label on the <output> that announces the total number of cart items as they are added. Here’s the final demo once again: CodePen Embed Fallback Maybe Use View Transitions Instead? I wanted to share this trick because I think it’s a clever approach that isn’t immediately obvious at first glance. But this also smells like a situation where the modern View Transition API might be relevant. Adrian Bece writes all about it in a Smashing Magazine piece. In fact, his example is exactly the same: animating items added to a shopping cart. What’s nice about this is that it only takes two elements to build the transition: the item and the cart label. Using CSS, we can hook those elements up with a view-transition-name, define a @keyframes animation for moving the item, then trigger it on click. No duplicate elements or state juggling needed! Alternatively, if you’re working with just a few items then perhaps a checkbox input is another possible approach that only requires a single element per item. the downside, of course, is that it limits how many items you can add to the card. But if you need to add an infinite number of items and the View Transition API is out of scope, then perhaps this radio input approach is worth considering. A Radio Button Shopping Cart Trick originally published on CSS-Tricks, which is part of the DigitalOcean family. You should get the newsletter.
-
Installing Fedora Linux in the Simplest Possible Way
by: Abhishek Prakash Wed, 27 Aug 2025 07:02:58 GMT Fedora is one of the most dependable Linux distro choices. It is cutting edge, backed by Red Hat, features newer features and has a wide community support. If you have chosen to use it as your main desktop operating system, let me show you the steps for installing Fedora. 🚧Please note that this will erase any other operating system and all the data on your computer and install a fresh Fedora Linux on it. If you have important data on the computer, please copy them on an external disk.With that warning in place, let's see how you can install Fedora. The entire procedure is composed of three main steps: Creating a live USB of Fedora (on any computer)Booting into live Fedora USB (on the computer where you have to install it)Installing from live USB (should take around 5 to 10 minutes)Booting into the freshly installed Fedora and setting up the user accountLet's see these steps in detail. Step 1: Create live USB of FedoraFirst, you download the ISO file of the latest Fedora workstation. You'll see several options on the download page. If you don't know any better, you should be using a regular computer, and you should go for the "Intel and AMD x86_64" option as indicated in the screenshot below. Download Fedora ISOThis will download a single ISO file of around 2.2 GB in size. There are torrent downloads available for Fedora. However, finding the correct file to download could be challenging for new users. You will have to create a live USB of Fedora from the ISO you just downloaded. Fedora provides an official media writer tool for creating live USB. It's called Fedora Media Writer and it is available for Linux, Windows and macOS from the same download page where you download Fedora. There are many other tools available for creating live USB. I prefer Balena Etcher. It is available for Linux, Windows and macOS. Download Balena EtcherUsing Etcher is simple. Plug in your USB, run Etcher and browse to the download ISO file. It should automatically show the plugged in USB but still make sure that it is the intended USB. Once you have done that, hit the Flash! button. Using Etcher to create Fedora live USBIf you need details, please follow our tutorial on how you can use Etcher to create a live USB. Install and Use Etcher on Linux for Making Live Linux USBEtcher is a popular USB flasher app for creating bootable Linux USB drives. Let me show you how to install it and how to use it for making a live Linux disk.It's FOSSAnkush DasAlternative command line option for terminal nerdsAlternatively, if you are on Linux, you can use the dd command to create a live USB. Replace /path/to/fedora.iso with the path where you have downloaded the ISO file, and /dev/sdx with your USB drive in the example below. You can get your drive information using lsblk command. dd bs=4M if=/path/to/fedora.iso of=/dev/sdx status=progress && syncStick to Balena Etcher if you are comfortable with a GUI. Step 2: Boot from live USB🚧Make sure there is no important data on the computer where you are going to install Fedora. If there is, copy to an external disk. You have been notified for the second time.Plug the live Fedora live USB in the computer where you want to install it. Power on or restart the system. When the system is booting up, start pressing the F2/F10/F12 keys when you see the logo of your computer manufacturer on the screen. This will take you to BIOS where you have to ensure that boot settings are set to allow booting from USB. Boot Order (Click to enlarge the image)Save and exit the BIOS settings and when the system boots now, you should see the familiar grub screen. Sorry for the poor screenshot. Step 3: Installing Fedora LinuxOnce you are in the live session, you'll see the option to install Fedora. Click on it. When the installer starts, it lets you select the language and keyboard: Language and KeyboardNext it asks you where to install Fedora. If you have multiple disks, internal or external, you may have to select the appropriate one. Installation Destination and MethodIt provides you with three options: Share disk with other operating system: This is the dual boot option. If you have Windows or other Linux installed on the system, you can use this option to have both operating systems on the same disk, same computer.Use entire disk: This will format the existing disk and install Fedora as the only operating system on the computer.Mount point assignment: This is the advanced option where you create free space on the disk first and then make partitions as you require. While the first two methods install Fedora with predefined partitions, some Linux users prefer creating separate disk partitions for root, swap, home and boot. We will use the second option here and that is to 'use entire disk'. This is the simples of the option. An absolute no-brainer. 🚧Please note that your disk will be formatted with this method and you'll lose any existing data on it. Please make backups on external disk beforehand and save your important data. You have been warned for the third time now.If you want, you can opt for disk encryption. This is a double-edged sword. If you forgot the encryption password, you cannot retrieve your data and you'll have to format the disk and reinstall an operating system. Storage ConfigurationIt will show you the partitions it is going to delete and create. As you can see, it automatically created boot and root partitions. Review and InstallHit the "Erase data and install option" and the installation starts: Installation progress screenOnce the installation starts, you don't have to do anything except waiting. It should take less than five minutes to finish the installation. For me, it took almost four minutes from the previous step to this step: Installation FinishedOnce the installation finishes, restart the system and take out the live USB. You don't need it anymore and if you kept it plugged in, it might boot again from the live USB. This is why you should remove the live USB. Step 4: Post install setupThe installation is quick but there are still a few things left to deal with. Did you notice that the entire installation didn't ask anything about user account creation? That happens when you boot into Fedora for the first time post installation. You'll see the option to choose the language and keyboard once again. Set Language and Keyboard Choose the privacy settings. I suggest enabling location services to utilize features like Nightlight. Privacy SettingsProvide your time zone. You'll see the option to enable third-party repositories to access software like Google Chrome and proprietary Nvidia drivers. I prefer enabling third-party repos in Fedora. Third Party repositoryAnd finally, you see the option to create user account. Set username and password And that's about it. Setup CompleteKeep on exploring FedoraYou'll see another welcome screen but this one is from GNOME and you only see it once after a fresh install. Go through ut if you want to just close it. You are ready to explore this awesome distribution. If it helps, we have some recommendations on things to do after installing Fedora and you should totally check it out. We also have a collection of Fedora tutorials to help you get started. Getting Started With FedoraCollection of useful tutorials for new Fedora users.It's FOSSAbhishek PrakashEnjoy Fedora 🤠
-
Using Nightlight in Hyprland
by: Sreenath Tue, 26 Aug 2025 12:25:20 GMT I presume that you are no stranger to the nightlight feature. It filters blue light from your screen and shifts colors to warmer, orange tones during evening hours, reducing eye strain while using computers at night. From KDE to Cinnamon, most Linux desktop environments offer this as a bulit-in feature. Look at GNOME Nightlight feature; it is available right from the quick toggle buttons. GNOME NightlightDon't get your hopes high if you are using Hyprland. You won't get a click to enable nighlight feature here. However, you can surely configure your way out of the blue light. hyprsunset: The Hyprland nightlight toolHyprland has an ecosystem of tools like Hyprpaper (wallpaper utility), hyprlock (lockscreen utility), etc. In that regard, hyprsunset is a small utility that provides nightlight in Hyprland. 🚧hyprsunset is available from Hyprland 0.45 onwards. Since Hyprland is in a highly active state, I'll presume that most of the Hyprland users are already using the latest and greatest version.If you are on Arch Linux, you can install hyprsunset from the official repository using: sudo pacman -S hyprsunset hyprsunsetConfigure hyprsunset Once you installed, you need to configure hyprsunset with values. First, create a configuration file at ~/.config/hypr called hyprsunset.conf. nano ~/.config/hypr/hyprsunset.conf Set the gammaYou can set the maximum gamma in hyprsunset using the max-gamma keyword. This is useful for controlling hyprsunset using hyprctl. You will see that in a later section. max-gamma = 150 This sets the maximum gamma to 150%. The absolute maximum gamma is set at 200%. You cannot set it beyond 200. A high value of gamma will increase the brightness beyond comfortable limits. Profileshyprsunset works by setting profiles of nightlight conditions. You can consider it a time-based rule for the screen settings. The general syntax is: profile { option = value } Day-time profileYou don't want to enable the nightlight during the day. So, create a profile for the daytime usage. max-gamma = 150 profile { time = 6:00 identity = true gamma = 1.0 } The above profile will be activated at 6 AM. You see, it sets three options: time: Specifies at what time the profile should be activated.identity: Effectively disables the temperature settings. Your display will work at normal values.gamma: While the identity setting is true, you can only change the gamma values. Any temperature change is ignored. In the example, it is set to 100% (1.0). If you have a very dim monitor, set it to a higher value. Remember, it can't go above the max-gamma set value, here 150 (1.5).Night-time profileLet's say you want to create a warmer profile when the time is 6 o'clock in the evening. profile { time = 18:00 temperature = 5500 gamma = 0.8 } The above profile will be activated at 6 PM and apply a 5500K temperature. You can create more profiles with hyprsunset. For example, an even dimmer and warmer temperature at 11 p.m. at night as a reminder to sleep. profile { time = 23:00 temperature = 4000 gamma = 0.7 } So, your config file (~/.config/hypr/hyprsunset) will look like this: max-gamma = 150 profile { time = 6:00 identity = true gamma = 1.0 } profile { time = 18:00 temperature = 5500 gamma = 0.8 } profile { time = 23:00 temperature = 4000 gamma = 0.7 } The choice is all yours. You can play with the configuration as much as you like. 📋There are almost no screenshots or videos in this tutorial because the screenshots do not capture the effect of nightlight. Start hyprsunsetThe best and easiest way to start hyprsunset is using the Hyprland config file (~/.config/hypr/hyprland.conf). Open the config file and scroll to the location where application autostart is defined (exec-once statements). Then add the following line: exec-once = hyprsunset Change temperature with shortcutsEarlier, I mentioned that you can control hyprsunset using the hyprctl command. This is possible because hyprsunset supports IPC (inter-process communication). See the command below that will reduce the temperature by 500K: hyprctl hyprsunset temperature -500 So, in Hyprland config, you can set the keyboard shortcut to get the effect. bind = $mainMod, H, exec, hyprctl hyprsunset temperature +500 bind = $mainMod, B, exec, hyprctl hyprsunset temperature -500 Restart Hyprland and you can change the temperature with the keyboard shortcuts. When a new profile is activated, this setting adjusts to the value mentioned in the profile. Wrapping UpFYI, Plus members of It's FOSS can access our Hyprland series for more organized learning. Get ‘Hyp’ with HyprlandLet’s get on the “hyp” wagon with Hyprland. Learn all the essentials you need to know to use this trending window compositor and get an awesome looking Linux desktop.It's FOSS PlusSreenath VI feel that Nightlight is one such feature that should be enabled immediately after installing a system. Staring into the monitor late at night is never comfortable to the eyes. Even though the bluelight filter alone cannot entirely make your eyes safe, nightlight is still a welcome feature. You should practice other measures as well, like not staring at the screen for more than 30 minutes continuously. There are apps that allow you to take frequent breaks from screen that you can rely on. I'll see if I can find some for Hyprland. Enjoy the night light 💡
-
Check Logs from Previous Boot With Journalctl
by: Abhishek Prakash Tue, 26 Aug 2025 13:26:28 +0530 Need to troubleshoot boot issues with Linux or check what happened during your last system startup? Linux keeps detailed records of every boot process, and knowing how to access them can save you hours of debugging time. If your Linux system uses systemd, you can use the journalctl command to filter the logs to only show entries since the last boot (current boot): journalctl -b You can widen your search by including logs from previous boots: journalctl -b -1 # Last boot journalctl -b -2 # Two boots ago 💡Mind the -. It is important. To show the logs from previous boot, you should use -b -1. If you used -b 1 or tried to shorten it to -b1, it will show the oldest available log entries. How? I discuss it later in this article.Another thing to note is that it shows all the logs since the last boot or from the boot of your choice. It does NOT show only the boot logs. Read the tutorial to know more. List all available boot sessionsJournald logs are automatically categorized into boots. You can list all available boot sessions: journalctl --list-boots If your journal logs are not cleared periodically, you may have a huge number of entries: abhishek@fedora:~$ journalctl --list-boots IDX BOOT ID FIRST ENTRY LAST ENTRY -27 bd0f37aef0124f0d86241d0eb50d662c Sat 2025-08-02 11:00:04 IST Sat 2025-08-02 11:25:34 IST -26 22253d042d4744189e54bc2b2b77a1e8 Sat 2025-08-02 16:56:02 IST Sat 2025-08-02 12:34:57 IST -25 3a69d4a3214d468a87f4a970e0517ece Sat 2025-08-02 21:56:58 IST Sat 2025-08-02 21:02:38 IST -24 57b0a704069e43abacff6d2d07ac139e Sun 2025-08-03 15:48:54 IST Mon 2025-08-04 19:59:17 IST -23 6e1cc5f2f4dd4b078e5e9d411a1fabcf Tue 2025-08-05 14:00:24 IST Tue 2025-08-05 20:54:14 IST -22 03f9a0122be946ecb7b6380df05a8f65 Wed 2025-08-06 02:24:25 IST Tue 2025-08-05 20:54:39 IST -21 7ccc21453f274e03ad3f81f9d675acc2 Wed 2025-08-06 13:21:40 IST Thu 2025-08-07 07:44:58 IST -20 424f9cc39e5849c2a135fccc3894502b Thu 2025-08-07 13:15:27 IST Thu 2025-08-07 21:00:16 IST -19 8b27ff506a914c9abe0029e9f853dcea Fri 2025-08-08 02:30:29 IST Thu 2025-08-07 21:01:16 IST -18 890c072132b34e15b5729e4a09bf5518 Sat 2025-08-09 12:46:58 IST Wed 2025-08-13 08:20:17 IST -17 7738ee2a779a4d49920f17cc0578b3a9 Wed 2025-08-13 13:59:28 IST Thu 2025-08-14 22:51:46 IST -16 b62483a27dc142e894decb2cfa3f72df Fri 2025-08-15 04:21:59 IST Thu 2025-08-14 22:52:15 IST -15 62b8b0fc5deb4881973c1fe41a31aead Fri 2025-08-15 13:00:51 IST Fri 2025-08-15 21:56:37 IST -14 e5ba68c84d964ddb8964f6baac530236 Sat 2025-08-16 03:26:50 IST Fri 2025-08-15 21:57:07 IST -13 73fb7955afd74d7a91f9c0d70f9b96e0 Sat 2025-08-16 13:40:38 IST Sat 2025-08-16 08:12:16 IST -12 c293bc7e40b64ce3be55a146a0a45486 Sat 2025-08-16 13:42:27 IST Sat 2025-08-16 22:49:31 IST -11 3f598542369243bcb8e751c49f715839 Sun 2025-08-17 12:51:43 IST Mon 2025-08-18 07:51:35 IST -10 5fac9ae8cbb44a5ca90f258a60c036ad Mon 2025-08-18 13:21:58 IST Tue 2025-08-19 04:04:00 IST -9 216b2e7b71194087892efcceaef4ac40 Tue 2025-08-19 14:58:31 IST Tue 2025-08-19 21:34:03 IST -8 0e111369d2c044b08386d45b26da2dc4 Wed 2025-08-20 13:05:32 IST Thu 2025-08-21 07:14:59 IST -7 2ec4b0206ae64f4ba0812a5c4baa4a5e Thu 2025-08-21 12:45:13 IST Thu 2025-08-21 22:19:02 IST -6 97454d3a65a04f518247b970b5451a6a Fri 2025-08-22 03:49:16 IST Fri 2025-08-22 08:26:36 IST -5 e456fff3f8244e96aa97f7208eebc9de Fri 2025-08-22 13:57:48 IST Fri 2025-08-22 23:17:52 IST -4 216eed49441b42a692a93f400e602b47 Sat 2025-08-23 13:57:19 IST Sun 2025-08-24 00:29:19 IST -3 82bce811b46d438aa66a27c46038d539 Sun 2025-08-24 13:47:44 IST Sun 2025-08-24 17:51:44 IST -2 8f6d6d1f00a14f8fb1688019f6771c13 Mon 2025-08-25 00:39:24 IST Sun 2025-08-24 21:25:20 IST -1 c967313d8c33423d8c44b0a3ec8b64fb Mon 2025-08-25 14:04:57 IST Tue 2025-08-26 08:40:32 IST 0 4eed4f352f33469fa16f81949e2e796d Tue 2025-08-26 14:19:35 IST Tue 2025-08-26 12:14:26 IST I shared the entries from my desktop Linux and hence it has so many entries. My servers don't reboot as frequently. Now, you could get the logs from a specific boot entry by specifying its boot ID. journalctl -b 216eed49441b42a692a93f400e602b47But that's the long road and that's why it is easier to just use -1, -2 etc. - matters while using journalctl -b Now, remember I talked about the importance of using - while viewing the logs from specific boot? journalctl -b -1 will represent the second last entry, the one with boot ID c967313d8c33423d8c44b0a3ec8b64fb.But journalctl -b 1 or journalctl -b1 will give you the first entry in chronological order in the boot listing, Which will be boot entry -27 with boot ID bd0f37aef0124f0d86241d0eb50d662c in our example here.💡Remember, negative numbers count backwards from the current boot (0), so -1 is the previous boot, -2 is two boots ago, etc.Understanding the log outputBoot logs can be overwhelming at first glance. Now, there is no magic way to read them and find out the issue. Still, let me share a few suggestions that will guide you through with a little better understanding of what these logs mean. Here's a sample log: Aug 26 09:45:22 hostname kernel: [ 0.000000] Linux version 6.5.0-generic Aug 26 09:45:22 hostname kernel: [ 0.000000] Command line: BOOT_IMAGE=/vmlinuz Aug 26 09:45:22 hostname systemd[1]: Starting network.service... Aug 26 09:45:23 hostname NetworkManager[856]: <info> NetworkManager starting... Here's the breakdown: Timestamp: Aug 26 09:45:22Hostname: Your system's nameProcess: kernel, systemd[1], NetworkManager[856]Log Level: <info>, <warn>, <error>Message: The actual log contentAt this point, it would be better if you started filtering logs for things of interest. Filtering the logs from noiseFind the errors and warnings in current boot: journalctl -b -p err # Errors only journalctl -b -p warning # Warnings and above Look for service startup in the previous boot: journalctl -b -1 | grep "Starting\|Started" See if it detected some hardware: journalctl -b | grep -i "detected\|found" You can also filter on specific services: journalctl -b -u ssh journalctl -b -u docker💡You can always use grep to filter on interesting terms such firmware, hardwrae, device, panic, error, warning etc. Journalctl has plenty of built-in filters but at time,s they are just way too many to remember.Focus on kernel logsKernel initialization can be a simple grep: journalctl -b | grep "kernel:" Show all the kernel messages during the current boot: journalctl -b -kYou can combine it with grep or use the built-in priority based filtering. The command below will show all the kernel related error logs in the present boot. journalctl -b -k -p errUse systemd-analyze to look for slow boot issuessystemd provides a handy utility that can be used to see your system's boot issues. systemd-analyzeThis will give you a summary of your system's boot time. abhishek@fedora:~$ systemd-analyze Startup finished in 4.170s (firmware) + 2.262s (loader) + 1.115s (kernel) + 2.017s (initrd) + 10.501s (userspace) = 20.067s graphical.target reached after 10.474s in userspace.You can investigate it further and see which services are taking longer than you would want them to. systemd-analyze blameYou'll see huge output with services that take the longes at the top. 4.469s dnf-makecache.service 4.031s NetworkManager-wait-online.service 2.269s plymouth-quit-wait.service 2.138s sys-module-fuse.device 2.076s dev-tpm0.device 2.076s sys-devices-LNXSYSTM:00-LNXSYBUS:00-MSFT0101:00-tpm-tpm0.device 2.056s dev-ttyS4.device 2.056s sys-devices-pci0000:00-0000:00:1e.0-dw\x2dapb\x2duart.4-dw\x2dapb\x2duart.4:0-dw\x2dapb\x2duart.4:0.0-tty-ttyS4.device 2.048s sys-devices-LNXSYSTM:00-LNXSYBUS:00-MSFT0101:00-tpmrm-tpmrm0.device 2.048s dev-tpmrm0.device 2.046s sys-devices-platform-serial8250-serial8250:0-serial8250:0.2-tty-ttyS2.device 2.046s dev-ttyS2.device 2.046s sys-devices-platform-serial8250-serial8250:0-serial8250:0.1-tty-ttyS1.device 2.046s dev-ttyS1.device 2.043s dev-ttyS3.device 2.043s sys-devices-platform-serial8250-serial8250:0-serial8250:0.3-tty-ttyS3.device 2.043s sys-devices-platform-serial8250-serial8250:0-serial8250:0.0-tty-ttyS0.device 2.043s dev-ttyS0.device 2.012s sys-module-configfs.device 1.733s dev-disk-by\x2dpath-pci\x2d0000:55:00.0\x2dnvme\x2d1\x2dpart4.device 1.733s dev-disk-by\x2ddiskseq-1\x2dpart4.device 1.733s sys-devices-pci0000:00-0000:00:1c.0-0000:55:00.0-nvme-nvme0-nvme0n1-nvme0n1p4.device 1.733s dev-disk-by\x2did-nvme\x2dWD_PC_SN560_SDDPNQE\x2d1T00\x2d1102_24313Y807163_1\x2dpart4.device Note that these services run in parallel, not sequential. If you want, you can generate a waterfall chart of the services: systemd-analyze plot > boot_analysis.svgJournalctl boot logs are your first line of defense when troubleshooting system issues. With these tools and techniques, you'll be able to quickly identify and resolve boot-related problems, making your Linux experience smoother and more reliable!